Elasticsearch 대 Cassandra 대 Cassandra를 사용한 Elasticsearch


110

저는 NoSQL을 배우고 있으며 고객의 요구 사항 중 하나에 대해 다른 옵션을 찾고 있습니다. 이 질문을 올리기 전에 다양한 리소스를 살펴 보았습니다 (NoSQL에 대한 지식이 거의없는 사람).

  • 더 빠른 속도로 데이터를 저장하고 데이터를 읽어야합니다.
  • 완전히 안전하고 쉽게 확장 할 수 있습니다.
  • Analytics 용 데이터를 검색 할 수 있습니다.

나는 짧은 목록으로 끝났다 : Cassandra and Elasticsearch

내가 이해하는 것은 Cassandra가 인덱스를 사용하여 데이터를 쓰고 읽을 수 있기 때문에 나에게 완벽한 NoSQL 스토리지 솔루션이라는 것입니다. 실패하거나 실패 할 수있는 곳은 Analytics에 있습니다. 미래에에서 데이터를 가져 from_date to to_date오거나 분석을위한 데이터를 가져 오는 더 많은 방법을 원하거나 데이터 모델을 제대로 설계하지 않거나 장기적인 시각을 유지하지 않으면 세상이 계속 변하는 상황에서 상당히 어려울 수 있습니다.

동안 Elastic Search(Lucene을 바탕으로) 색인에서 최고입니다, 어떤 임의의 텍스트를 던져 무작위 데이터를 검색 할 수 있습니다. 그러나 데이터를 검색하려는 경우에도 동일하게 작동합니까 from_date to to_date(그럴 수도 있습니다). 하지만 진짜 질문은 이것이 검색 엔진입니까, 아니면 Cassandra와 같은 완벽한 NoSQL 데이터 저장소입니까? 그렇다면 왜 우리는 여전히 카산드라가 필요합니까?

둘 다 다른 세계에 있다면 설명해주세요! 더 효과적인 솔루션을 얻기 위해 어떻게 결합합니까?


2
DSE Search = Cassandra + solr integrated = 두 세계의 장점 : Solr의 검색 능력에 의해 구동되는 스토리지를위한 확장 가능한 db도 고려해야합니다.
Bereng 2014

1
@Bereng, DSE는 상업용이고 우리는 상업용 소프트웨어를 돌보지 않습니다.
Reddy

3
순수익이 $ 2 백만 (US) 미만인 스타트 업이라면 DSE를 무료로 사용할 수 있습니다 (최소 1 ~ 2 년).
Aaron

답변:


150

우리의 애플리케이션 중 하나는 Cassandra와 ElasticSearch 모두에 저장된 데이터를 사용합니다. 우리는 Cassandra를 사용하여 가능할 때마다 이러한 레코드에 액세스하고 특정 애플리케이션 측 요청을 준수하도록 설계된 쿼리 테이블에 데이터를 복제합니다. 쿼리 테이블이 허용하는 것보다 더 자유로운 검색을 위해 ElasticSearch는 해당 기능을 훌륭하게 수행합니다.

우리는 같은 질문을했습니다. "ElastsicSearch에서 모든 것을 얻지 않는 이유는 무엇입니까?"

대답은 ElasticSearch가 영구 데이터 저장소가 아닌 검색 엔진으로 설계되었다는 것입니다. 때때로 ElasticSearch가 쓰기를 잃습니다. ElasticSearch에서는 모든 것을 날려 버리고 다시로드하지 않고 스키마 변경을 수행하기가 어렵습니다. 이를 위해 ElasticSearch를 Cassandra 클러스터와 동기화 상태로 유지하도록 설계된 작업을 작성했습니다. 또한 이 주제에 대해 Quora에 대한 최근 논의 가 있었는데 , 비슷한 점이 나타났습니다.

그 존재는 ElasticSearch 작동 말했다 검색 엔진으로. 그리고 Cassandra 는 확장 가능한 고성능 데이터 저장소로 훌륭하게 작동합니다 . 그러나 데이터 쿼리는 데이터 검색 과 다릅니다 . 둘 중 하나가 필요할 때가 있으며 두 가지 조합이 우리의 응용 프로그램에 적합합니다. 그것은 당신에게 잘 작동 할 수도 있고 그렇지 않을 수도 있습니다.

분석에 관해서는 Cassandra Spark 커넥터를 사용하여 더 복잡한 OLAP 쿼리를 처리하는 데 성공했습니다. 도움이 되었기를 바랍니다.

20200421 편집

비슷한 질문에 대한 새로운 답변을 작성했습니다.

ElasticSearch 대 ElasticSearch + Cassandra


24
누군가 데이터 쿼리검색 의 차이점에 대해 자세히 설명 할 수 있습니까 ?
Dror

21
예를 들어 데이터의 ID를 알고 있으면 데이터를 요청하고 (cassandra) 데이터의 ID를 모르는 경우 데이터를 검색합니다 (탄력적 검색).
arsenik

2
@Gladwell은 모두 데이터의 크기와 쿼리의 복잡성에 따라 다릅니다. 이론적으로 Elastic은 모든 것을 할 수 있습니다. 그러나 특히 다중 지역 / DC를 지원하는 경우 Cassandra가 Elastic보다 큰 데이터 세트 (쿼리 용)를 지원하기 위해 더 나은 확장 작업을 수행 할 것이라고 믿습니다.
Aaron

1
@Aaron ... 대규모 데이터 세트를 지원하기위한 확장은이 두 엔진이 모두 잘하는 것입니다. 우리 조직은 탄력적 검색을 기본 데이터베이스, 경고 엔진, 분석 도구로 사용하며 이제 xpack이 기계 학습을 지원합니다. 또한 Edge IOT에 대한 비즈니스 통계를 제공합니다.
AnthonyJClink

1
@Dror 진짜 질문을 묻는다!
Mike Ezzati 2018 년

32

Cassandra + Lucene은 훌륭한 옵션입니다. 이 문제에 대한 다양한 이니셔티브가 있습니다. 예를 들면 다음과 같습니다.


명심해야 할 한 가지 사항은 2.1에서 사용자 지정 인덱서를 "드롭"할 수 있다는 것입니다. 예를 들어 Statio가 C *의 포크로 메인 라인 C *를 벗어나 수행하는 작업을 모방 할 수 있습니다. 이 작업을 수행하려는 광범위한 노력은 알지 못하지만 Lucene 인덱스를 이런 방식으로 C *에 직접 넣을 계획입니다. 추가 정보 : issues.apache.org/jira/browse/CASSANDRA-8717
evanv

8

이 문제를 직접 해결 한 후에는 casandra와 같은 NoSQL 데이터베이스가 안정적인 쓰기 작업으로 데이터 스키마를 보존하고 elasticsearch가 제공하는 인덱싱 작업을 활용하고 싶지 않을 때 유용하다는 것을 깨달았습니다. 일부 인덱스 데이터를 보존하려는 경우 스킴을 신뢰하고 쓰기보다 훨씬 더 많은 읽기만 수행 할 경우 elasticsearch가 좋습니다.

제 경우는 데이터 분석이었습니다. 그래서 나중에 다음 단계가 무엇인지 확인하기 위해 데이터를 많이 탐색하기를 원했기 때문에 탄력적 검색에서 많은 Latices를 보존했습니다. 분석 파일 라인에서 데이터 스키마를 많이 변경하려면 casandra를 사용했을 것입니다.

또한 좋은 그래픽으로 데이터를 표시하는 데 사용할 수있는 kibana와 같은 멋진 표현 도구가 많이 있습니다. 어쩌면 나는 게으르지 만 그들은 매우 잘 생겼고 나를 도왔습니다.


4

Cassandra와 ElasticSearch의 조합으로 데이터를 저장하면 대부분의 기능을 사용할 수 있습니다. 키-값 테이블을 조회 할 수 있으며 색인에서 데이터를 검색 할 수도 있습니다.

이 조합은 애플리케이션에 이상적인 많은 유연성을 제공합니다.


4

Elassandra 는 Cassandra + Elastic search의 결합 된 솔루션입니다. Elastic search를 사용하여 데이터를 인덱싱하고 Cassandra를 데이터 저장소로 사용합니다. 성능에 대해서는 잘 모르겠지만이 기사에 따르면 성능이 좋습니다.
애플리케이션에 검색 기능이 필요한 경우 Elassandra가 최고의 오픈 소스 옵션입니다. DSE 검색을 사용할 수 있지만 비용이 많이 듭니다.


1

Elasticsearch와 Cassandra를 사용하는 애플리케이션을 개발했습니다. 유사한 데이터가 Cassandra에 저장되고 Elasticsearch에 인덱싱되었습니다.

우리 애플리케이션의 UI에는 검색, 집계, 데이터 내보내기 등과 같은 기능이있었습니다. 백엔드 마이크로 서비스는 지속적으로 거대한 데이터 (Kafka 주제에 대한)를 가져와 Cassandra에 저장했습니다. 데이터가 Cassandra에 저장되면 서비스는 데이터가 Elasticsearch에 인덱싱되었는지 확인합니다.

Cassandra는 Elasticsearch의 "진실의 근원"역할을했습니다. ES 인덱스의 재 인덱싱이 필요한 경우 Cassandra를 쿼리하고 데이터를 ES로 다시 인덱싱했습니다.

이 솔루션은 확장이 매우 쉽고 검색 및 집계 속도가 훨씬 빨 랐기 때문에 도움이되었습니다.


0
  • elasticsearch는 Lucene 인덱스를 기반으로하므로 elasticsearch에 인덱싱을 저장하려는 경우 데이터 검색을 위해 Cassandra 자체의 인덱싱과 비교하여 가장 잘 수행됩니다.
  • 요구 사항이 실시간 검색과 관련이없는 경우 Elasticsearch를 NoSQL 데이터베이스로 사용할 수도 있습니다. ElasticSearch가 쓰기를 잃고 스키마 변경이 어렵다는 생각이 있지만 데이터 볼륨이 너무 크지 않은 경우. Elasticsearch를 NoSQL 데이터베이스로 사용하는 elasticsearch와 함께 최상의 인덱싱을 제공하는 검색 엔진으로 elasticsearch를 쉽게 얻을 수 있습니다. 이를 방지 할 수있는 몇 가지 방법이 있습니다. 데이터 구조가 일관되면 문제가 발생할 수 있으므로 elasticsearch에서 스키마 변경 작업을 수행했습니다.
  • ElasticSearch 또는 SOlr의 후원자입니다. 나는 두 검색 엔진 모두에서 작업했으며 올바르게 구성하면 두 검색 엔진을 유창하게 사용할 수 있다는 것을 경험했습니다.
  • 실시간 결과를 목표로하고 응답에서 밀리 초 지연을 방해 할 수 없다면 내가 생각할 수있는 단점 만 있습니다. 그런 다음 cassandra 또는 couchbase와 같은 다른 NoSQL 데이터베이스의 도움을받는 것이 좋습니다.
  • solr를 사용하는 Cassandra는 elasticSearch를 사용하는 Cassandra보다 더 잘 작동합니다.

0

Cassandra는 ID로 데이터를 검색하는 데 능숙합니다 . 보조 인덱스 성능에 대해서는 잘 모르지만 Elasticsearch만큼 빠르지 않은 것 같습니다. 확실히 Elasticsearch는 전체 텍스트 검색 기능 ( 텍스트 분석 , 관련성 점수 등)에있어 승리 합니다.

Cassandra는 업데이트 성능에서도 승리합니다 . Elasticsearch는 업데이트를 지원하지만 업데이트는 실제로 원 자성 작업에서 재 인덱스 + 소프트 삭제입니다.

Cassandra는 매우 멋진 복제 모델을 가지고 있습니다 (고장 안전이 필요한 경우). Elasticsearch도 괜찮습니다. 저는 ES가 특히 불안정하다고 말하는 캠프에 있지 않습니다 (모든 소프트웨어와 마찬가지로 때때로 문제가 있음).

Elasticsearch에는 실시간 분석을위한 집계도 있습니다 . 검색 속도가 너무 빠르기 때문에 데이터 하위 집합에 대한 분석도 빠릅니다 .

귀하의 요구 사항이 그들 중 하나에 의해 충분히 만족된다면 (여기 ES가 잘 작동하는 것처럼 보입니다), 저는 하나만 사용합니다. 두 세계의 요구 사항이 있으면 다음 중 하나를 수행 할 수 있습니다.

  • 그중 하나를 사용하고 단점을 해결하십시오. 예를 들어 Elasticsearch로 많은 업데이트를 처리 할 수 ​​있지만 더 많은 샤드와 더 많은 하드웨어를 사용할 수 있습니다.
  • 둘 다 사용하고 동기화되어 있는지 확인하십시오.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.