Использование elasticsearch как основной базы данных

1,397 views
Skip to first unread message

Сергей Невзоров

unread,
May 3, 2014, 7:11:11 AM5/3/14
to elastics...@googlegroups.com
Добрый день, коллеги!

В ходе изучения возможностей 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? Отправив запись на одну из нод, то можно ли быть уверенным что пользователь, считывая данные с другой ноды, получит актуальный результат?

В общем интересуют любые мнения по этому поводу.
Заранее спасибо.



Igor Motov

unread,
May 4, 2014, 9:07:08 PM5/4/14
to elastics...@googlegroups.com
Некоторые пользователи действительно использую Elasticsearch как основное хранилище данных. Однако, надо учитывать, что Elasticsearch не поддерживает транзакции, и контроль консистентности http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-index_.html#index-consistency пока что уступает тому, что можно найти в Cassandra. В Elasticsearch есть поддержка отношений "один-ко-многим" (смотри запросы has_parent/has_child) но если вам нужно "многие-ко-многим", то это вам придется денормализировать данные или делать все самим. Судя по вашему описанию задачи, возможно Вам нужна связка SQL-Elasticsearch. Или даже просто SQL.
Reply all
Reply to author
Forward
0 new messages