CQRS (Lagom) эластичный поиск со стороны чтения - PullRequest
0 голосов
/ 17 мая 2018

Я читал, что ElasticSearch не самый надежный с точки зрения долговечности, но я хотел бы использовать его для хранения данных на стороне чтения для оптимального поиска.
Если мы храним события (на стороне записи)) в базе данных кассандры, это означает, что данные никогда не теряются.

Я не совсем понимаю, что означает «долговечность данных».
Если мы используем ES на стороне чтения, означает ли это, что некоторые данные могут быть импортированы неправильно?Означает ли это, что данные за один день могут быть случайно потеряны, или риск того, что все данные за один день могут просто исчезнуть?

Вариант использования - приложение на основе геолокации, аналогичное Twitter.
Насколько надежно в конечном итоге использовать ES исключительно на стороне чтения, без необходимости более надежного хранилища данных (на стороне записи) дляхранить данные?
В зависимости от того, что подразумевается под этой «долговечностью», мне интересно, какие меры следует предпринять, чтобы воспроизвести события и поддерживать постоянную ES-совместимость.

Спасибо

1 Ответ

0 голосов
/ 17 мая 2018

У меня нет большого опыта работы с ES на производстве, но, по сути, обеспечение того, чтобы при сохранении данных они сохранялись, особенно в распределенной системе, было трудно. Есть много, много крайних случаев, которые очень трудно понять правильно, и требуется время для базы данных, чтобы созреть и разобраться в этих крайних случаях. Менее надежная база данных - это та, которая, вероятно, не устранила все эти проблемы.

Конечно, ElasticSearch является популярной базой данных с открытым исходным кодом, и процветающее сообщество поддерживает ее, поэтому, скорее всего, нет четко определенных случаев, когда «ваши данные будут потеряны при таких обстоятельствах», скорее всего, есть случаи, которые либо не были получены или когда пользователи столкнулись с ними в дикой природе, пользователи, которые сталкивались с ними, не заботились о том, чтобы их отладить, потому что они использовали только ES как вторичное хранилище данных и смогли восстановить его из своего основного хранилище данных. Всякий раз, когда обнаруживается случай, что ES теряет данные при хорошо понятных обстоятельствах, сопровождающие ES быстро исправят это.

Наиболее типичные варианты использования ES - это хранилище вторичной базы данных, и в этом случае долговечность не так важна, поскольку хранилище данных можно восстановить из первичного. Соответственно, вы обнаружите, что долговечность не так важна для сопровождающих ES, потому что их пользователи не просят об этом - это не значит, что она не имеет высокого приоритета, просто по сравнению с другими базами данных, она не так высока.

Таким образом, если вы используете ES, у вас больше шансов столкнуться с ошибками, когда вы потеряете данные, чем с другими базами данных, которые либо более развиты, либо уделяют больше внимания долговечности при разработке.

Что касается того, должны ли вы регулярно удалять свою базу данных ES и воспроизводить события, это действительно зависит от вашего варианта использования и того, насколько важно для вашей базы данных ES быть согласованным. Многие крайние случаи, связанные с долговечностью ES, вероятно, приводят к серьезным повреждениям со значительной потерей данных, т. Е. Вы будете знать, если это произойдет, поэтому в этом случае нет необходимости регулярно отбрасывать и воспроизводить. Еще одна вещь, которую следует учитывать, заключается в том, что из-за того, как работают стороны чтения CQRS, у вас будет только ограниченное число записывающих в хранилище ES, и вы сможете легко контролировать этот параллелизм. Это означает, что скачок нагрузки не приведет к скачку числа записывающих устройств, а произойдет то, что ваше хранилище ES может временно отставать по согласованности от основного хранилища. Из-за этого вы, вероятно, с меньшей вероятностью столкнетесь с крайними случаями, которые могут привести к тому, что ES потеряет данные.

Итак, вы, вероятно, не потрудитесь сбросить и перестроить, если не произойдет что-то катастрофическое, если только последствия незаметной потери небольших объемов данных способом, который вы не заметите, настолько велики, что невероятно малый шанс, что это может случиться недопустимо.

...