Elasticsearch чтение и запись согласованности
Elasticsearch не имеет параметра «прочитанная последовательность» (как у Cassandra). Но это имеетнаписать последовательность" а также "читать предпочтения».
Документация говорит следующее оСогласованность записи
Согласованность записи
Чтобы предотвратить запись на «неправильную» сторону сетевого раздела, по умолчанию операции индексации выполняются успешно только при наличии кворума (> replicas / 2 + 1) активных сегментов. Это значение по умолчанию может быть переопределено для каждого узла с помощью параметра action.write_consistency. Чтобы изменить это поведение для каждой операции, можно использовать параметр запроса согласованности.
Допустимые значения согласованности записи: один, кворум и все.
Обратите внимание, что для случая, когда количество реплик равно 1 (всего 2 копии данных), поведение по умолчанию будет успешным, если 1 копия (основная) может выполнить запись.
Индексная операция возвращается только после всехактивный сегменты в группе репликации проиндексировали документ (синхронизация репликации).
Мой вопрос о последнем абзаце:
Индексная операция возвращается только после всехактивный сегменты в группе репликации проиндексировали документ (синхронизация репликации).
Еслиwrite_consistency=quorum
(по умолчанию), и все сегменты работают (без сбоев узла, без сетевого раздела), затем:
1) Возвращается ли операция индексирования, как толькокворум осколков завершил индексацию? (хотя все осколки живы / активны)
2) Или операция индекса возвращает, когдавсе живые / активные осколки завершили индексацию? (т.е. кворум рассматривается только в случае сбоев / тайм-аутов)
В первом случае - чтение может быть в конечном итоге непротиворечивым (может получить устаревшие данные), запись выполняется быстрее.
Во втором случае - чтение выполняется согласованно (до тех пор, пока нет сетевых разделов), запись выполняется медленнее (поскольку она ожидает более медленного сегмента / узла).
Кто-нибудь знает, как это работает?
Еще одна вещь, которая меня интересует - почему значение по умолчанию для 'предпочтение'param (в запросе get / search) естьrandomized
но нет_local
(что должно быть более эффективным, я полагаю)