2013-12-09 2 views
1

Что произойдет, если физическое пространство узла одного из осколков в SolrCloud заполнено? Будет ли запрос индекса на эти узлы или этот осколок перенаправляется на другие осколки, имеющие пространство?Использование физического пространства узла Solr в осколке

ответ

1

Короткий ответ не легко, не автоматически, потому что определенный осколок заполнен. Причина, заключающаяся в том, что 32-битовый диапазон хэшей распределяется равномерно между каждым осколком, Solr использует алгоритм хеширования murmur, который поддерживает количество документов в каждом осколке, сбалансированном (примерно), поэтому большинство ваших узлов начнут сталкиваться с такими же ограничениями почти на в то же время, поэтому вам нужно отслеживать свои индексы и планировать их раньше или позже. У вас есть два варианта в этом контексте. Вначале пользовательское хеширование позволяет маршрутизировать документы на определенные осколки на основе некоторого общего значения поля, например идентификатора арендатора. Другим примером этого может быть маршрутизация документов на основе категории. Самая большая проблема при использовании пользовательского хеширования заключается в том, что он может создавать неуравновешенные осколки в вашем кластере. Вторым вариантом является разделение Shard, позволяющее разбить существующий осколок на два поднабора. Чтобы сделать разбиение осколков, используйте действие SPLITSHARD API-интерфейсов коллекций для разделения существующего осколка на два поднабора. Выполните «жесткую» фиксацию после завершения процесса разделения, чтобы активировать новые подстраницы. Выгрузите исходный осколок из кластера.

Но если вы все же решите принудительно наложить документ на определенный осколок, потому что знаете, что другой осколок заполнен, вы можете сделать это следующим образом: Solr 4.5 добавила возможность указать реализацию маршрутизатора с параметром router.name. Если вы используете маршрутизатор «составной», вы можете отправлять документы с префиксом в идентификаторе документа, который будет использоваться для вычисления хеша, который используется Solr для определения осколка, на который отправляется документ для индексирования. Префикс может быть любым, что вам бы хотелось (например, это не должно быть имя осколка), но оно должно быть последовательным, так что Solr ведет себя последовательно. Например, если вы хотите совместить документы для клиента, вы можете использовать имя или идентификатор клиента в качестве префикса. Например, если ваш клиент «IBM» с документом с идентификатором «12345», вы должны вставить префикс в поле идентификатора документа: «IBM! 12345». Восклицательный знак ('!') Здесь имеет решающее значение, поскольку он определяет осколок для направления документа.

Вы можете прочитать об этом здесь: https://cwiki.apache.org/confluence/display/solr/Shards+and+Indexing+Data+in+SolrCloud

+0

Спасибо Арун за ответ. – buddy86

+0

Я в основном искал любую автоматическую маршрутизацию, доступную в Solr. Если его там нет, остается только 2 варианта. Один использует SPLITSHARD и увеличивает пространство SolrCloud. Другой использует «Custom Sharding» и передает данные другим осколкам. В настоящее время я использую solr-4.2.1. В solr-4.5.0 весь API-интерфейс коллекции работает неправильно. Они работают в solr-4.6.0, которая является последней версией Solr. – buddy86