Так вот моя дилемма ...
Я запускаю поисковый индекс в реальном времени с помощью Solr, индексируя около 6 миллионов документов в день. Срок действия документов истекает примерно через 7 дней. Поэтому каждый день я добавляю 6 млн документов и удаляю 6 млн документов. К сожалению, мне нужно запускать «оптимизацию» так часто, иначе у меня не хватит места на диске.
Во время «оптимизации» Solr продолжает обслуживать запросы на чтение, но запросы на запись блокируются. У меня все мои записи в очереди, так что в рабочем состоянии все в порядке. Однако, так как мой индекс настолько велик, «оптимизация» занимает около часа, и в течение этого часа новые обновления для чтения недоступны. Так что мой индекс в реальном времени, за исключением часа в день, который я оптимизирую. Похоже, что за это время индекс отставал на час. Это не оптимально.
Мое текущее решение заключается в следующем: записать все данные в два индекса Solr, оба за очередями. Поочередно «оптимизировать» по двум индексам каждые 12 часов. Во время «оптимизации» индекса 1 направьте весь трафик чтения на индекс 2 и наоборот. Эта временная маршрутизация кажется довольно хрупкой и небрежной.
Есть ли лучший способ?