ElasticSearch vs. ElasticSearch + Cassandra - PullRequest
       16

ElasticSearch vs. ElasticSearch + Cassandra

1 голос
/ 15 апреля 2020

Мой главный вопрос - в чем выгода интеграции Cassandra и Elasticsearch по сравнению с использованием только Elasticsearch?

На самом деле, есть ответы на аналогичные вопросы по StackOverflow (например, здесь и здесь ). Но есть некоторые моменты:

  • Многие ответы старые. Многое могло измениться за эти годы.
  • Одна вещь, которая упоминается, это то, что «Иногда ElasticSearch теряет записи». Однако можно предположить, что эти предполагаемые потери могли быть вызваны некоторыми ошибками, которые были устранены в эти годы. Предполагается, что, например, Cassandra также может иметь некоторые ошибки, которые вызывают потерю данных. Существуют ли какие-либо принципиальные различия между Cassandra и Elasticsearch, которые приводят к тому, что Elasticsearch теряет данные, но не вызывает их для Cassandra?
  • Упоминается, что «изменения схемы трудно выполнить в ElasticSearch, не удаляя все и не перезагружая. " Это может не быть для нас серьезной проблемой, если предположить, что наша модель данных относительно стабильна или, по крайней мере, обратно совместима. Кроме того, из-за отображения Dynami c в Elasticsearch он может адаптироваться к новым требованиям (например, дополнительные поля).
  • Что касается задержки индексации в Elasticsearch, Cassandra также не обеспечивает согласованность. Таким образом, в Cassandra вы также можете столкнуться с задержками при чтении письменных данных.

В целом, какие дополнительные функции предлагает Cassandra при использовании в сочетании с Elasticsearch?

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

1 Ответ

2 голосов
/ 15 апреля 2020

Итак, как автор одного из связанных ответов ( Elasticsearch против Cassandra против Elasticsearch с Cassandra ), я полагаю, что мне следует взвесить здесь.

эти предполагаемые потери возможно, это произошло из-за некоторых ошибок, которые были устранены в эти годы.

Это абсолютно верное утверждение. Ответ, который я написал, уже почти шесть лет, и ElasticSearch за это время вырос на 1011 * намного более надежный продукт. При этом, есть некоторые вещи, которые Cassandra может сделать, что ElasticSearch просто не был предназначен для (и наоборот).

какие дополнительные функции предлагает Cassandra ...

Я могу вспомнить некоторые из них, которые я суммирую здесь:

  • Пропускная способность записи / производительность / задержка

ElasticSearch это поисковая система, основанная на проекте Lucene. Обработка больших объемов записи при низких задержках - это не то, для чего она предназначена; по крайней мере, не "из коробки". Есть способы настроить ElasticSearch, чтобы быть лучше в этом, как описано здесь: Методы достижения высокой производительности записи с ElasticSearch . Но с точки зрения создания нового кластера с минимальной конфигурацией, вы потратите меньше времени на разработку Cassandra, чтобы выполнить sh this.

"Иногда ElasticSearch теряет записи"

Да, я написал, что , Опять же, ElasticSearch улучшился. Много. Но я все еще вижу, что это происходит в условиях высокой пропускной способности записи. Если кластер спроектирован для определенного уровня пропускной способности, а приложение превышает , эти допуски приводят к перегрузке узла из-за обратного давления записи, запись будет потеряна.

Кассандра также не застрахована от этой проблемы. У него просто есть более высокая терпимость к этому. Если бы вы использовали их вместе, то было бы неплохо создать что-то наподобие Kafka для «регулирования» пропускной способности записи для каждого.

  • Высокая доступность нескольких центров обработки данных (MDHA)

Имея возможность определять логические центры обработки данных и зоны доступности (стойки), Cassandra всегда умела реплицировать набор данных в нескольких регионах. Это проблематично c для ElasticSearch, так как у него нет концепции логического центра обработки данных, и его «главные» узлы не активны / активны.

  • Одноранговые узлы и основанные на ролях узлы

В качестве продолжения моей точки MDHA ElasticSearch теперь позволяет узлам назначаться с "ролью" в кластере. Вы можете указать несколько узлов, которые будут выполнять роль «главной», отвечая за добавление и обновление индексов. Любой узел может направить трафик поиска c на узлы, которые работают под ролью «данные». Фактически, один из способов улучшить пропускную способность записи (моя первая тема для разговора) - назначить один или два узла ролью «ingest», которая может препятствовать трафику чтения и записи c мешать друг другу.

Это отличается от подхода Кассандры, где каждый узел является равноправным, и может обрабатывать операции чтения и записи. Возможность обрабатывать все узлы одинаково, упрощает обслуживание и администрирование. И «нет», несмотря на распространенное заблуждение, «начальный» узел не является чем-то особенным.

  • Запрос против поиска

Для меня Это принципиальная разница между ними. Запрос не такой же, как поиск. Они могут показаться похожими, но они совершенно разные.

Извлечение данных путем сопоставления с шаблоном в одном или нескольких столбцах / свойствах поиск . Также с поиском, количество результатов заранее неизвестно. Конечно, Cassandra добавила некоторые функции в последние несколько лет, чтобы разрешить сопоставление с образцом на основе LIKE запросов (я не рекомендую его использовать). Но когда требуется «поиск» в наборе данных, Cassandra не может конкурировать с ElasticSearch.

Извлечение данных путем предоставления указанного значения c для указанного ключа c (столбца) составляет запросов . С запросом также легче иметь точные ожидания относительно количества результатов, которые будут возвращены. Если бы я создавал приложение и знал, что мне нужно только когда-либо получить данные, основанные на предварительно определенном запросе c с указанным ключом c, я бы выбрал Cassandra каждый раз.

С помощью Cassandra я также могу настроить согласованность запросов, требуя оперативного подтверждения от большего или меньшего количества реплик. Кроме того, я также могу направить эти операции в конкретный c geographi c регион, в зависимости от местоположения приложения.

... при использовании в сочетании с Elasticsearch?

Они хорошо дополняют друг друга. Кассандра хороша в некоторых вещах (подробно описано выше), которых нет в ElasicSearch (и наоборот ... много говорят). Требования к приложению могут потребовать и поиска и запроса. Иногда у вас есть приложение, которому нужен высокоскоростной поиск ключей «о, и мы также хотим поиск».

Summary, tl; dr;

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

...