Solr% 100 Доступность записи во время оптимизации - PullRequest
3 голосов
/ 24 февраля 2011

Так вот моя дилемма ...

Я запускаю поисковый индекс в реальном времени с помощью Solr, индексируя около 6 миллионов документов в день. Срок действия документов истекает примерно через 7 дней. Поэтому каждый день я добавляю 6 млн документов и удаляю 6 млн документов. К сожалению, мне нужно запускать «оптимизацию» так часто, иначе у меня не хватит места на диске.

Во время «оптимизации» Solr продолжает обслуживать запросы на чтение, но запросы на запись блокируются. У меня все мои записи в очереди, так что в рабочем состоянии все в порядке. Однако, так как мой индекс настолько велик, «оптимизация» занимает около часа, и в течение этого часа новые обновления для чтения недоступны. Так что мой индекс в реальном времени, за исключением часа в день, который я оптимизирую. Похоже, что за это время индекс отставал на час. Это не оптимально.

Мое текущее решение заключается в следующем: записать все данные в два индекса Solr, оба за очередями. Поочередно «оптимизировать» по двум индексам каждые 12 часов. Во время «оптимизации» индекса 1 направьте весь трафик чтения на индекс 2 и наоборот. Эта временная маршрутизация кажется довольно хрупкой и небрежной.

Есть ли лучший способ?

Ответы [ 4 ]

4 голосов
/ 24 февраля 2011

Согласно комментариям здесь и часто задаваемым вопросам здесь оптимизация не требуется. Отсутствие оптимизации может изначально увеличить размер индекса, но он не должен постоянно увеличиваться. Я предлагаю вам отключить оптимизацию на несколько дней и следить за размером индекса.

1 голос
/ 17 декабря 2012

Другим вариантом, основанным на времени, является ведение отдельного индекса для каждого дня и запись во все индексы каждый день.В этом случае вам не нужно выполнять удаление, и вместо этого вы поворачиваете индексы по принципу «первым пришел - первым обслужен» (FIFO).

Index 1 = Day 1 + Day 2 + Day 3 + Day 4 + Day 5 + Day 6 + (no longer used)
Index 2 = empty + Day 2 + Day 3 + Day 4 + Day 5 + Day 6 + Day 7 + (no longer used)
Index 3 = empty + empty + Day 3 + Day 4 + Day 5 + Day 6 + Day 7 + Day 8
... 

Идея понятна.На 2-й день индекс 1 перестанет использоваться полностью, и вы перейдете к использованию индекса 2 для чтения.

Очевидно, что это упрощенный пример, и вам нужно повернуть наименование индекса (индекс 2 становится Индекс 1 и т. д.), но, надеюсь, это обеспечивает другой подход, который может привести к реализации.

0 голосов
/ 24 февраля 2011

Использовать репликацию.

Пиши своему Мастеру, копируй его своему Рабу. Оптимизация будет запускаться на вашем Мастере и выполнять все запросы к ведомому.

0 голосов
/ 24 февраля 2011

Вы пытались использовать разные слияния или другую политику слияния? Если вы пишете постоянно, это может быть лучше, чем оптимизация.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...