2016-12-08 5 views
0

Каковы основные различия между потоковым и нормальным поиском с точки зрения внутренней реализации. Обычный поиск также будет работать распределенным образом, не так ли? Как потоковая передача повышает производительность? Документация не помогает.SOLR Streaming VS Search

ответ

1

Распространенные запросы на поиск запросов, вычисления результатов, предоставления результатов и слияния ручек. Каждый шаг обрабатывается полностью, прежде чем перейти к следующему шагу. Это работает достаточно хорошо, когда количество данных невелико. Для больших запросов, таких как доставка миллионов документов, для этого требуются огромные буферы памяти. Это также означает, что вызывающему абоненту необходимо подождать до самого последнего шага (доставки результата вызывающему абоненту) до того, как результат будет обработан.

С потоковой передачей все это продолжается: вычисление, доставка и слияние происходят одновременно с фиксированной верхней памятью памяти. Вы можете попросить результаты 10K, или вы можете запросить 10 миллиардов, единственная разница в том, сколько времени это займет. Поскольку каждая часть процесса активна одновременно, включая доставку абоненту, это также означает, что первые данные результата будут доставлены вызывающему абоненту очень быстро.

Внутренне потоковая передача в основном осуществляется поиском по поисковому запросу. Каждая страница (документы 10K, если я правильно помню) передается по потоку, как только она была рассчитана. Игнорируя оптимизацию, подобное поведение можно было бы эмулировать извне с глубоким поисковым вызовом и пользовательским слиянием.

+0

Привет, пожалуйста, проконсультируйтесь с простым запросом и объясните, как потоковая передача работает над поиском – redeemed

+0

'q = *: * & rows = 100000000' по индексу с документами 100M, это почти наверняка способ выдувания вашей кучи, независимо от того, распространяется ли ваша настройка или нет. Первый пример в https://cwiki.apache.org/confluence/display/solr/Streaming+Expressions не имеет такой проблемы. –

+0

Итак, проблема здесь заключается в загрузке всех 1M-документов сразу, где потоковая передача позволяет вам одновременно получать один документ на стороне клиента, правильно. Что делать, если мне нужно будет сделать некоторые вычисления над этими документами 1M, все равно мне нужно будет провести эти 1M документы в памяти (полученные с помощью потоковой передачи), правильно? – redeemed