RavenDB и устаревшие индексы при запуске приложений
У меня есть приложение, которое:
- Использует встроенную базу данных RavenDB
- С опцией монотонного чтения
- Со статическими индексами
Я заметил, что когда приложение запускается, индексы все временно устаревают, даже если они не были устаревшими при завершении работы приложения (чисто) предыдущего запуска.
Например, я запускаю приложение, вставляю 10 записей и жду, пока индексы будут обновлены. Я запрашиваю его и вижу ожидаемые результаты. Затем я закрываю приложение, запускаю его снова и запрашиваю, и я не получаю никаких результатов. Через секунду индексы обновились, и теперь я могу получить результаты. Если я повторю это, иногда я получаю 10 результатов, иногда 0 результатов, иногда 2 результата.
Мое предположение заключалось в том, что при запросе индекса в момент времени T я всегда видел "по крайней мере, как последовательные" результаты при T + 1. Однако, если сервер перезагружается за это время, я, кажется, вижу менее согласованные результаты при T + 1. Это не конечная последовательность, это возможная несогласованность!:)
Мои вопросы:
- Было ли мое предположение неправильным/глупым?
- Есть ли способ предотвратить это?
- Является ли это поведение просто запущенным, или это может произойти в любое время? Например, можно ли отобразить 10 результатов, затем обновить 0 результатов, а затем снова 10 результатов следующего обновления только потому, что Равен решил, что он хочет переиндексировать все?
Ответы
Ответ 1
Чтобы ответить на ваши вопросы,
Было ли мое предположение неправильным/глупым?
Нет, поскольку я понимаю, что ваше предположение верное, вы можете видеть устаревшие результаты, но не должны видеть менее устаревшие результаты, если индекс не был перестроен с нуля между T и T + 1, и вы ударили его сразу после индекса был reset.
Есть ли способ предотвратить это?
Единственный способ, которым я знаю, - быть уверенным, что индексы были чисто закрыты. Обычно в папках индекса обычно хранятся файлы блокировки, указывающие, что это не так. Журналы уровня отладки из Raven укажут, инициируется ли перестройка.
Если все остальное не удается, вам может потребоваться процесс, который блокируется до тех пор, пока все индексы (или те, которые вам не нужны) будут свежими, прежде чем приступать к остальной части процесса запуска приложения.
Является ли это поведение просто пусковым, или это может произойти в любое время? Например, можно ли отобразить 10 результатов, затем обновить 0 результатов, а затем снова 10 результатов следующее обновление только потому, что Равен решил, что он хочет переиндексировать все?
Да, это возможно, если индекс reset, но насколько я знаю, это произойдет только после запуска, если вручную запустить через API или студию управления.