Ответ 1
Говоря о аргументах использования Mongo вместо/вместе с ES:
-
Управление пользователями/ролями.
- Встроенный в MongoDB. Может не соответствовать всем вашим потребностям, может быть неуклюжим где-то, но он существует, и он был реализован довольно давно.
- Единственное, что для безопасности в ES -
shield
. Но он поставляется только для подписки Gold/Platinum для использования в целях производства.
-
Схема
- ES схематично, но построена поверх
Lucene
и написана вJava
. Основная идея этого инструмента - индексные и поисковые документы, и работающий таким образом, требует согласованности индексов. На задней панели все документы должны быть установлены в плоском индексеLucene
, что требует некоторого понимания того, как ES должен иметь дело с вашими вложенными документами и значениями, и как вам следует упорядочивать индексы для поддержания баланса между скоростью и полнотой/согласованностью данных. Работа с ES требует, чтобы вы постоянно храните некоторые вещи в схеме. Т.е.: поскольку вы можете индексировать почти что-либо в ES, не помещая соответствующее сопоставление заранее, ES может "угадывать" сопоставление "на лету", но иногда делает это неправильно, а иногда неявное сопоставление является злым, потому что, как только оно ставится, оно не может быть изменено w/o переиндексация всего индекса. Таким образом, лучше не рассматривать ES как хранилище схем, потому что вы можете на некоторое время наступить на грабли (и это будет боль:)), а скорее рассматривать его как интенсивно для схемы, по крайней мере, когда вы работаете с документами, что может нарезать на конкретные поля. - Mongo, с другой стороны, может "пережевывать и оставлять без крошек" из всего, что вы вкладываете в него. И большинство ваших запросов будут хорошо работать, пока вы не вспомните, как Mongo будет обрабатывать ваши данные с точки зрения JavaScript. И поскольку JS слабо типизирован, вы можете работать с действительно схематичным рабочим процессом (конечно, если вам это нужно)
- ES схематично, но построена поверх
-
Обработка нестатистических данных.
- ES ограничивается обработкой данных, не помещая их в индекс поиска. И это решение достаточно хорошо, когда вам нужно хранить и извлекать дополнительные данные (по сравнению с данными, которые вы хотите выполнить).
- MongoDB поддерживает
gridFS
. Это дает вам возможность обрабатывать большие куски данных за одним и тем же интерфейсом. I.e., вы можете хранить двоичные данные в Mongo и извлекать их в пределах одного и того же интерфейса с точки зрения вашего кода.