Обновить до флеша - программирование
Подтвердить что ты не робот

Обновить до флеша

Если новый индекс индексируется индексом Elasticsearch, он доступен для поиска примерно через 1 секунду после операции индекса. Однако это может быть принудительно сделать этот документ доступным для поиска сразу, вызывая операцию _flush или _refresh по индексу. В чем разница между этими двумя операциями - результат для них одинаковый, документ сразу доступен для поиска.

Что именно делает каждая из этих операций?

Документация ES, похоже, не решает эту проблему глубоко.

4b9b3361

Ответ 1

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

Обновление фактически вызывает повторное открытие считывателя индекса lucene, так что моментальный снимок данных, по которым вы можете выполнять поиск, обновляется. Эта функция Lucene является частью API Lucene в режиме реального времени.

Обновление asticsearch делает ваши документы доступными для поиска, но не гарантирует, что они будут записаны на диск в постоянное хранилище, поскольку не вызывает fsync, что не гарантирует долговечность. Что делает ваши данные долговечными, так это фиксация lucene, которая намного дороже.

Хотя вы можете вызывать lucene reopen каждую секунду, вы не можете делать то же самое с lucene commit.

Через lucene вы можете получить новые документы, доступные для поиска, практически в реальном времени, часто вызывая reopen, но вам все равно нужно вызвать commit, чтобы гарантировать, что данные записываются на диск и синхронизируются, что обеспечивает безопасность.

Elasticsearch решает эту "проблему", добавляя журнал транзакций для каждого сегмента (фактически, индекс lucene), где хранятся операции записи, которые еще не были зафиксированы. Журнал транзакций находится в безопасном и безопасном состоянии, поэтому вы получаете долговечность в любой момент времени, даже для документов, которые еще не были зафиксированы. Вы можете искать документы практически в реальном времени, так как обновление происходит автоматически каждую секунду, и вы также можете быть уверены, что в случае чего-то плохого журнал транзакций можно будет воспроизвести, чтобы восстановить в конечном итоге потерянные документы. Приятная вещь в журнале транзакций заключается в том, что он может использоваться для других целей, например, для предоставления в реальном времени идентификатора.

. asticsearch flush эффективно запускает фиксацию lucene и очищает также журнал транзакций, поскольку, как только данные фиксируются на уровне lucene, долговечность может быть гарантирована самой lucene. Flush также представлен в виде API и может быть изменен, хотя обычно это не является необходимым. Сброс происходит автоматически в зависимости от того, сколько операций добавлено в журнал транзакций, насколько они велики и когда произошла последняя очистка.

Ответ 2

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

Флеш вызывает фиксацию Lucene. Это намного дороже.

Для получения более подробной информации я написал статью, которая охватывает некоторые из следующих: Elasticsearch снизу вверх:)

Ответ 3

  1. refresh: преобразование буфера в памяти в сегмент в памяти, в котором можно искать.
  2. flush: (a) объединить маленькие сегменты в большой сегмент (b) синхронизировать большой сегмент с диском (c) пустой транслог.

Обновить:

refresh

Flush:

flush

Сегмент является частью люцена. Неизменяемые сегменты делают кэши страниц ОС всегда чистыми.

Translog является частью Elasticsearch. Translog - цель долговечности.

Ссылка:

  1. Руководство по операциям обновления и очистки в Elasticsearch
  2. Официальный документ для сделать документ постоянным