2014-11-21 5 views
77

Я изучаю NoSQL и рассматриваю различные варианты для одного из требований моего клиента. Я рассмотрел различные ресурсы, прежде чем ставить этот вопрос (человек с небольшими знаниями в NoSQL).Elasticsearch vs Cassandra vs Elasticsearch с Cassandra

  • Мне нужно хранить данные быстрее и читать данные.
  • Полностью отказоустойчивый и легко масштабируемый.
  • Возможность поиска по данным для Google Analytics.

Я закончил с коротким списком: Cassandra and Elasticsearch

Что я понимаю, Cassandra является идеальным решением для хранения данных NoSQL для меня, как я могу записать данные и считывать данные с помощью индексов. В случае сбоя или сбоя в Google Analytics. В будущем, если я хочу получить данные от from_date to to_date или больше способов получить данные для аналитики, если я не буду правильно разрабатывать модель данных или придерживаться долгосрочного зрелища, что может быть довольно сложно в постоянно меняющемся мире.

В то время как Elastic Search лучше всего индексировать (поддерживается Lucene) и может выполнять поиск данных случайным образом, бросая какой-то случайный текст. Но работает ли это так же, даже если я хочу получить данные from_date to to_date (я ожидаю, что это может быть). Но реальный вопрос: это поисковая система или идеальное хранилище данных NoSQL, такое как Cassandra? Если да, зачем нам нужна Кассандра?

Если они оба в другом мире, пожалуйста, объясните это! Как их объединить, чтобы получить более эффективное решение?

+1

Вы также должны рассмотреть DSE Search = Cassandra + solr integrated = лучшее из обоих миров: масштабируемое db для хранилища, управляемое силой поиска Solr. – Bereng

+0

@Bereng, я думаю, что DSE является коммерческим, и мы не заботимся о коммерческих программах. – Reddy

+1

Если вы являетесь стартапом с чистой прибылью <2 миллиона долларов США (US), они позволят вам использовать DSE бесплатно (в течение как минимум года или двух). – Aaron

ответ

109

Один из наших приложений используют данные, хранящиеся в оба Кассандру и ElasticSearch. Мы используем Cassandra для доступа к этим записям всякий раз, когда можем, и дублируем данные в таблицы запросов, предназначенные для привязки к конкретным запросам на стороне приложения. Для более либерального поиска, чем позволяют таблицы запросов, ElasticSearch прекрасно выполняет эту функциональность.

Мы задали тот же вопрос (о себе) ... «Почему бы нам просто не получить все от ElastsicSearch?»

Ответ заключается в том, что ElasticSearch был разработан как поисковая система, а не постоянное хранилище данных. Иногда ElasticSearch проигрывает записи. Изменения в схеме сложно сделать в ElasticSearch, не сдувая все и не перезаряжая. Для этой цели я написал задания, которые предназначены для синхронизации ElasticSearch с нашим кластером Cassandra. Был также fairly recent discussion on Quora about this topic, который дал аналогичные точки.

Это считается, ElasticSearch работает прекрасный в качестве поисковой системы. И Кассандра работает отлично как масштабируемое высокопроизводительное хранилище данных. Но запрос данные отличаются от поиск для данных. Иногда нам нужен тот или другой, и комбинация этих двух работ хорошо подходит для нашего приложения. Он может (или не может) работать хорошо для вас.

Что касается аналитики, у меня был некоторый успех в использовании разъема Cassandra Spark для обслуживания более сложных запросов OLAP. Надеюсь, это поможет.

+16

Может ли кто-нибудь уточнить разницу между * запросом * и * поиском * данных? – Dror

+12

@dror, например, если вы знаете идентификаторы ваших данных, вы просто просите об этом (cassandra), и если вы не знаете идентификатор (ы) ваших данных, то вы ищете его/их (эластичный поиск) , – arsenik

+0

@arsenik Ну, я могу выполнить поиск в cassandra с помощью Spark DataFrame с чем-то похожим на команду SQL LIKE. Полагаю, что, исследуя в elasticsearch, вы имеете в виду нечто более продвинутое. Я прав? –

26

Cassandra + Lucene - отличный вариант. Существуют различные инициативы по этому вопросу, например:

+0

Одна вещь, о которой нужно помнить, в 2.1 теперь вы можете «забросить» пользовательский индексатор ... так, например, вы могли бы подражать тому, что Statio делает с их вилкой C *, но с основной линией C *. Я не осведомлен о каких-либо широко распространенных усилиях для этого, но я планирую сам по себе отбросить индексы Lucene на C *. Для получения дополнительной информации: https://issues.apache.org/jira/browse/CASSANDRA-8717 – evanv

6

Я сам осознал, что базы данных NoSQL, такие как casandra, хороши, когда вы хотите, чтобы вы сохраняли свою схему данных с надежной операцией записи и не хотите использовать операции индексирования, которые elasticsearch предложения. Если вы хотите сохранить некоторые данные индексов, то elasticsearch хорош, если вы доверяете своей схеме и будете делать гораздо больше чтения, чем записи.

Моим делом была аналитика данных. Таким образом, я сохранил много своих латексов в поиске эластичности, так как позже мне хотелось много пройти через данные, чтобы увидеть, каким должен быть мой следующий шаг. Я бы использовал casandra, если бы захотел иметь много изменений в схеме данных в моих аналитических pilelines.

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

1

Хранение данных в комбинации Cassandra и ElasticSearch дает вам наибольшую функциональность. Он позволяет вам искать ключевые значения таблиц, а также позволяет вам искать данные в индексах.

Комбинация дает вам большую гибкость, идеально подходящую для вашего применения.

Смежные вопросы