Elasticsearch vs Cassandra vs Elasticsearch з Cassandra


110

Я вивчаю NoSQL і розглядаю різні варіанти однієї з вимог мого клієнта. Я пережив різні ресурси, перш ніж ставити це питання (людина, що має мало знань у NoSQL)

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

Я закінчив короткий список: Cassandra and Elasticsearch

Що я розумію, це Кассандра - ідеальне рішення для зберігання NoSQL для мене, оскільки я можу записувати дані та читати дані за допомогою індексів. Там, де вона не вдається або може вийти з ладу, є в Analytics. У майбутньому, якщо я хочу отримати дані from_date to to_dateабо більше способів отримати дані для аналітики, якщо я не будую модель даних належним чином або зберігаю довгостроковий погляд, що може бути досить важким у світі, що постійно змінюється.

Хоча Elastic Searchнайкраще в індексації (підкріплений Lucene) і може шукати дані випадковим чином, кидаючи якийсь випадковий текст. Але чи працює це так само, навіть якщо я хочу отримати дані from_date to to_date(сподіваюся, що це може бути). Але справжнє питання - це пошукова система чи ідеальне зберігання даних NoSQL, як Cassandra? Якщо так, то чому нам ще потрібна Кассандра?

Якщо вони обоє в іншому світі, поясніть, будь ласка! Як їх поєднати, щоб отримати більш ефективне рішення?


2
Вам слід також врахувати пошук DSE = Cassandra + solr інтегрований = кращий з обох світів: масштабований db для сховища, керований потужністю пошуку Solr.
Беренг

1
@Bereng, я думаю, DSE є комерційним, і ми не доглядаємо за комерційними програмними засобами.
Редді

3
Якщо ви стартап з чистими доходами <2 мільйони доларів (США), вони дозволять вам використовувати DSE безкоштовно (принаймні рік-два).
Аарон

Відповіді:


150

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

Ми задали те саме питання (про себе) ... "Чому ми просто не отримаємо все від ElastsicSearch?"

Відповідь полягає в тому, що ElasticSearch був розроблений як пошукова система, а не постійний сховище даних. Іноді ElasticSearch втрачає записи. Зміни схем в ElasticSearch важко здійснити, не видуваючи все і не перезавантажуючи. З цією метою я написав завдання, які підтримують синхронізацію ElasticSearch з нашим кластером Cassandra. Була також досить недавня дискусія щодо Quora на цю тему , що дало схожі моменти.

При цьому, ElasticSearch чудово працює як пошукова система. А Кассандра чудово працює як масштабований, високоефективний сховище даних. Але запит даних відрізняється від пошуку даних. Бувають випадки, коли нам потрібен той чи інший, і їх поєднання добре працює для нашого застосування. Це може (або це не може) спрацювати добре для вас.

Щодо аналітики, я мав певний успіх у використанні роз'єму Cassandra Spark для обслуговування більш складних запитів OLAP. Сподіваюся, що це допомагає.

Редагувати 20200421

Я написав новішу відповідь на подібне запитання:

ElasticSearch проти ElasticSearch + Cassandra


24
Чи може хтось детальніше пояснити різницю між запитом та пошуком даних?
Dror

21
@dror, наприклад, якщо ви знаєте ідентифікатори своїх даних, ви просто запитаєте їх (кассандра), а якщо ви не знаєте ідентифікаторів (-ів) ваших даних, тоді ви шукаєте їх / їх (еластичний пошук).
арсенік

2
@ Добре, все залежить від розміру ваших даних та складності ваших запитів. Теоретично Еластик може це зробити все. Однак я б довірив Кассандрі зробити кращу роботу з масштабування для підтримки великого набору даних (для запитів), ніж Elastic, особливо якщо ви підтримуєте багаторегіональний / DC.
Аарон

1
@Aaron ... масштабування для підтримки великого набору даних - це те, що обидва ці двигуни добре справляються. Наша організація використовує еластичний пошук як основну базу даних, механізм оповіщення, інструмент аналітики, і тепер, коли xpack підтримує машинне навчання; вона також надає статистику бізнесу навколо нашого краю IOT.
AnthonyJClink

1
@Dror Задаючи справжнє запитання!
Майк Еззаті

32

Кассандра + люцена - чудовий варіант. Існують різні ініціативи щодо цього питання, наприклад:


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

8

Після роботи над цією проблемою я зрозумів, що бази даних NoSQL, такі як casandra, добре, коли ви хочете переконатися, що ви зберігаєте свою схему даних надійною операцією написання, і не хочете скористатись операціями індексації, які пропонує elastsearch. Якщо ви хочете зберегти деякі дані індексів, тоді еластичний пошук хороший у випадку, якщо ви довіряєте своїй схемі і лише збираєтесь робити набагато більше читає, ніж пише.

Моя справа - аналітика даних. Тому я зберег багато своїх латишів в еластичному пошуку, оскільки пізніше я хотів багато переглядати дані, щоб побачити, що має бути моїм наступним кроком. Я використовував би касандру, якби хотів змінити схему даних у своїх аналітичних списках.

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


4

Зберігання даних у поєднанні Cassandra та ElasticSearch надає вам найбільшу функціональність. Він дозволяє шукати таблиці ключових значень, а також дозволяє шукати дані в індексах.

Поєднання дає вам велику гнучкість, ідеально підходить для вашого застосування.


4

Еласандра - комбіноване рішення Кассандри + Еластичний пошук. Він використовує Еластичний пошук для індексації даних і Кассандри як сховища даних, я не впевнений у ефективності, але згідно з цією статтею , її ефективність хороша.
Якщо вашій програмі потрібна функція пошуку, Elassandra - найкращий варіант з відкритим кодом. Пошук DSE доступний, але дорогий.


1

Ми розробили додаток, де ми використовували Elasticsearch та Cassandra. Подібні дані зберігалися в Кассандрі та індексувалися в Elasticsearch.

Інтерфейс нашого додатка мав такі функції, як пошук, агрегація, експорт даних тощо. Задні мікросервіси постійно отримували величезні дані (на теми Kafka) та зберігали їх у Кассандрі. Після збереження даних у Кассандрі служби переконують, що дані індексуються в Elasticsearch.

Кассандра виступала "Джерелом істини" для Еластичного пошуку. У випадках, коли потрібно було перевстановлення індексу ES, ми запитували Кассандру та повторно додавали дані в ES.

Це рішення допомогло нам, оскільки це було дуже легко масштабувати, а пошуки та агрегації були набагато швидшими.


0
  • Оскільки еластичний пошук побудований на індексі люцена, і якщо ви хочете зберігати індексацію в еластичному дослідженні, це найкраще порівняно з індексуванням у самій Кассандрі для отримання даних.
  • Якщо ваші вимоги не пов’язані з пошуком у режимі реального часу, ви можете також використовувати еластичний пошук як базу даних NoSQL, є думки, що ElasticSearch втрачає записи, а зміни в схемі важкі, але якщо ваш обсяг даних не надто великий. Ви можете легко досягти еластичного пошуку як пошукову систему з найкращим індексуванням, а також еластичним пошуком у базі даних aNoSQL. Існує кілька способів, які можна запобігти. Я працював над зміною схеми в еластичному дослідженні, якщо ваша структура даних є послідовною, то це створить будь-які проблеми.
  • Будучи прихильником ElasticSearch або SOlr. Я працював над обома пошуковими системами, і я переконався, що обидва пошукові системи можуть бути вільно використані, якщо ви їх правильно налаштували.
  • Тільки мінуси, які я можу подумати про це, якщо ви орієнтуєтесь на результат у режимі реального часу і не можете затримати мілісекунди затримки вашої відповіді. Тоді краще скористатися іншими базами даних NoSQL, такими як cassandra або couchbase.
  • Кассандра з сольром, працювати краще, ніж Кассандра з еластичним пошуком.

0

Кассандра чудово підходить для отримання даних за ідентифікатором . Я не знаю багато про ефективність вторинного індексу, але я сумніваюся, що це так швидко, як Elasticsearch. Безумовно, Elasticsearch виграє, коли мова йде про повний функціональний пошук тексту ( аналіз тексту , оцінка відповідності тощо).

Кассандра теж виграє в продуктивності оновлення . Elasticsearch підтримує оновлення, але оновлення - це дійсно перевстановлення + м'яке видалення в атомній операції.

У Кассандри є дуже приємна модель реплікації (якщо вам потрібно бути надзвичайно безпечними). Elasticsearch також добре, я не перебуваю в таборі, який каже, що ES особливо ненадійний (у нього є проблеми іноді, як і все програмне забезпечення).

Elasticsearch також має агрегації для аналітики в реальному часі. А оскільки пошук настільки швидкий, аналітика щодо підмножини даних також буде швидкою .

Якщо ваші вимоги достатньо добре задовольняються одним із них (наприклад, тут здається, що ES буде добре працювати), я б просто застосував один. Якщо у вас є вимоги з обох світів, ви можете:

  • скористайтеся одним із них і опрацюйте недоліки. Наприклад, ви можете працювати з багатьма оновленнями за допомогою Elasticsearch, але з більшою кількістю осколків та більше обладнання
  • використовувати обоє та переконайтесь, що вони синхронізовані
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.