Добрый день, коллеги!
В ходе изучения возможностей elasticsearch возник резонный вопрос: "а на сколько нужна другая база данных?". Изначально для своего проекта мы рассматривали вариант связки solr + cassandra, потом наткнулся на elasticsearch и стали его рассматривать как альтернативу solr. Но чем больше я изучаю возможности elasticsearch тем больше не понимаю зачем нам cassandra. В связи с этим хочу задать вопрос к специалистам есть ли у кого-нибудь опыт использования elasticsearch в качестве основной базы данных?
Вкратце опишу задачу:
1. Это B2B SaaS сервиc, т.е. пользователи загружают в базу данных свои формализованные документы (заказы на доставку в формате json) сервис их обрабатывает и генерирует другие формализованные документы (маршруты развозки), которые клиент забирает опять же в формате json
2. Количество входящих документов будем ориентироваться на 2 млн. в день, исходящих документов (рейсов) 100 тыс. в день.
3. Входящая информация меняется не очень часто (клиент может 2-3 раза в день перезагрузить заказы)
4. По работе с базой данных требуется, в основном, следующее:
* Получить все заказы за один день по клиенту (фильтр по полю "Дата заказа") - тут более мнеее понятно
* Записать рейсы (это связка id рейса - id заказа + еще несколько других) - вроде то же проблем не должно быть
* Поиск данных (и заказов и рейсов) по подстроке включая связанные данные. Т.е. Если пользователь в строке поиска вводит наименование клиента, то получается что должны быть найдены все заказы по этому клиенту. Вот тут для нас самый непонятный момент. В SQL мы могли просто сделать join и все. Что делать в elasticsearch? Хранить заказы в денормализованном виде (наименование клиента в каждой записи заказа)? Тогда надо обновлять все записи по клиенту если пользователь поменял название. Делать поиск по разным таблицам а потом их соединять в памяти?
5. Надежность хранения данных. В сcassandre можно заказывать необходимую консистентность, а как в elasticsearch? Отправив запись на одну из нод, то можно ли быть уверенным что пользователь, считывая данные с другой ноды, получит актуальный результат?
В общем интересуют любые мнения по этому поводу.
Заранее спасибо.