@RA
RA
04 Apr 2018

Например мы храним данные в mysql и используем elastic для поиска.
Как обеспечить целосность связки mysql->elastic?

Есть 2 варианта
1. Записывать в элестик изменения сразу же как только что-то изменилось в БД.
"+" - в эластике всегда актуальные данные
"-" - если что-то пошло не так (откат транзакции mysql или отвалился elastic), то целосность данных нарушается

  1. Время от времени записывать в эластик изменённые данные.
    "+" - если что-то заглючит, то изменения будут внесены позже
    "-" - нельзя полагаться на актуальность данных из эластика

Или есть ещё варианты?

04 Apr 2018

А что-то типа Last Modified как в http возможно намутить?

04 Apr 2018

В теории можно. Надо подумать

#mxlku/2 в ответ на /1
04 Apr 2018

RA, а почему не использовать оба варианта?
Т.е. записывать в эластик сразу по получению изменений, а потом (раз в сутки, например) переиндексировать еще раз все :)

04 Apr 2018

10 млн записей как-то не очень хочется лопатить. Даже раз в сутки.

#mxlku/4 в ответ на /3
17 Apr 2018

достану этот некротред. Решение получилось таким (почти п.1)
1. Запросы к эластику на добавление/обновление пишем в системную таблицу
2. Когда юзеру отдали ответ, то читаем эту системную таблицу и выполняем запросы непосредственно к эластику

В итоге имеем:
1. В эластике всегда актуальные данные
2. Если транзакция потерпит крах, то и в эластик ничего не запишется
3. Юзеру не нужно ждать когда данные запишутся в эластик, хотя там понт времени обычно.

Добавить пост

Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
Для форматирования текста используется Markdown.