그래프 데이터베이스를 이미 사용하고 있는데 왜 ElasticSearch를 사용합니까?


15

ElasticSearch 와 그래프 데이터베이스 의 비교에 대한 웹에서 깊은 설명을 찾지 못했습니다 .

둘 다 데이터를 트래버스하도록 최적화되어 있습니다.
ElasticSearch는 분석에 최적화 된 것 같습니다.
그러나 Neo4j는 Lucene을 기반으로 인덱스 및 일부 전체 텍스트 기능을 관리합니다.

그래프 데이터베이스를 이미 사용하고 있는데 왜 ElasticSearch를 사용합니까?

제 경우에는 Neo4j 를 사용하여 소셜 네트워크를 구축하고 있습니다.
ElasticSearch는 어떤 실질적인 이점을 제공합니까?

업데이트 ----------

방금이 단락을 찾았습니다.

elasticsearch가 유용한 수많은 경우가 있습니다. 일부 사용 사례는 다른 사용 사례보다 명확하게 요구합니다. 다음은 elasticsearch가 특히 적합한 몇 가지 작업입니다.

  • 특정 문구 (예 : "chef 's knife")와 가장 일치하는 많은 제품 설명 검색 및 최상의 결과 반환
  • 앞의 예에서 "chef 's knife"가 나타나는 여러 부서를 분류합니다 (이 책의 후반부 참조).
  • "시즌"처럼 들리는 단어에 대한 텍스트 검색
  • 맞춤법이 틀린 부분을 고려하면서 이전에 발행 된 검색을 기반으로 부분 입력 된 단어를 기반으로 검색 창 자동 완성
  • 머신 클러스터 전체에 지정된 수준의 중복성을 사용하여 대량의 반 구조적 (JSON) 데이터를 분산 방식으로 저장

그러나 elasticsearch는 위에서 언급 한 문제를 해결하는 데 뛰어나지 만 다른 사람들에게는 최선의 선택이 아니라는 점에 유의해야합니다. 관계형 데이터베이스가 최적화되는 문제를 해결하는 데 특히 나쁩니다. 아래와 같은 문제가 있습니다.

  • 재고에 남아있는 품목 수 계산
  • 주어진 달에 발송 된 모든 송장에 대한 모든 품목의 합계를 계산합니다.
  • 롤백 지원으로 트랜잭션 두 작업을 트랜잭션으로 실행
  • 전화 번호 및 내선 번호와 같이 여러 가지 용어간에 고유 한 레코드 만들기
  • Elasticsearch는 일반적으로 품질로 결과를 채점하는 것과 같은 데이터의 대략적인 답변을 제공하는 데 환상적입니다. elasticsearch는 정확한 일치 및 통계 계산을 수행 할 수 있지만 검색의 기본 작업은 본질적으로 대략적인 작업입니다.
  • 근사값을 찾는 것은 탄력적 검색을보다 전통적인 데이터베이스와 분리하는 속성입니다. 즉, 기존 관계형 데이터베이스는 정확성과 데이터 무결성이 뛰어나며 elasticsearch와 Lucene은 거의 제공하지 않습니다.

대략적인 답변이 필요하지 않은 경우 ElasticSearch는 이미 사용 된 그래프 데이터베이스와 비교하여 쓸모가 없다고 주장 할 수 있습니까?


답변:


17

ElasticSearch를 데이터베이스라고 부르는 것을 망설입니다. 데이터베이스를 대체하지는 않지만 기존 데이터베이스와 함께 기능, 특히 고급 텍스트 검색을 추가하는 것이 좋습니다.

나는 당신이 그들을 혼란스럽게 할 수있는 곳을 봅니다. 실제로 동일한 요구에 맞을 수 있지만 항상 그런 것은 아닙니다. ElasticSearch는 정확히 소리처럼 검색 합니다. 그래프 데이터베이스는 ElasticSearch처럼 관계 나 인덱스를 지정하지 않습니다. 근본적으로 그들은 아주 다르게 작동합니다. ElasticSearch 영어 분석기와 같은 문서를 분석 합니다. 이것이하는 일은 단어를 사용하고 해당 단어의 다양한 변형 또는 동의어를 분석합니다. 예를 들어, dig은으로 분석됩니다 dig,digs,dug,digging,digger .... elasticsearch에서 쿼리를 실행하면 쿼리도 분석 할 수 있으며 해당 단어를 쿼리 하고 관련성에 따라 점수 를 매길 수 있습니다 .

ElasticSearch는 정말 유연하기 때문에 훌륭한 도구입니다. 광범위한 상대적인 내용을 찾거나 건초 더미에서 바늘을 찾을 수 있으며 상대적으로 쉽습니다.

그래프 데이터베이스도 장점이 있습니다. 예를 들어 해시 태그와 같은 것들 또는 변경 가능한 많은 관계가있는 것들 사이의 관련성 / 상관 관계 찾기. 그것들은 훌륭하고 흥미로운 기술이지만, ElasticSearch만큼 강력하지 않다고 말해야합니다. 대부분 ElasticSearch는 이러한 종류의 작업에 적합하고 분석을 처리하므로 전체 텍스트 검색을 수행 할 수 있습니다. 그러나 미리 정의 된 태그 / 키워드를 기반으로하는 트위터 검색과 같은 시스템을 사용하려는 경우 이미 사용중인 그래프 데이터베이스를 사용하는 것이 좋습니다.

문제는 검색을 얼마나 강력하게하고 싶은가입니다. 정말 미세한 곡물 (전체 텍스트) 검색을 수행 해야하는 경우 elasticsearch를 사용합니다. 그렇지 않으면 항상 그래프 데이터베이스에서 비교적 쉽게 검색을 구현할 수 있습니다. 나중에 더 강력한 검색 엔진이 필요한 경우 검색을 elasticsearch로 마이그레이션하는 것이 불가능하지는 않다는 것을 염두에두고 검색을 구현하십시오.


3

이 두 데이터베이스 모두 특정 수준의 응용 프로그램 요구 사항에서 특정 문제를 해결해야 할 필요가 있습니다. 그래프 데이터베이스를 사용하지는 않았지만 그러나 우리는 지난 5 년 동안 우리 프로젝트 중 하나에서 MySQL과 함께 elasticsearch를 사용하고 있습니다. 이 프로젝트는 6m 문서를 통해 검색 할 방대한 데이터를 가지고 있으며 해당 엔티티 (10m 관계 문서) 사이에 방대한 관계가 있습니다.

사용 사례 : 친구들이 좋아하는 호텔을 검색하고 좋아하는 호텔 수로 모든 호텔을 정렬합니다. 그리고 자세히 보면 이 사례는 2 가지 관계 (Friend, Like)와 관련이 있습니다. 그래서 호텔과 내 친구 사이의 유사 관계 배를 검색해야합니다. 그런 다음 호텔은 총 좋아요 수를 기준으로 정렬해야합니다. 따라서 이러한 검색의 경우 그래프 데이터베이스가 좋습니다.

Elasticsearch는 문서에서 전체 테스트를 검색하는 데 큰 도움이되지만 위와 같은 관계를 통해 검색 할 때는 그리 좋지 않습니다. 내 팬인 문서 (엔터티)를 나열하고 팬 수별로 정렬합니다. 그러나 이것들은 한 단계 깊고 더 깊이 검색 할 때입니다. Elasticsearch는 충분하지 않습니다.

따라서 응용 프로그램 요구 사항을 이해 한 다음 데이터베이스로 이동하십시오. 둘 다 있어야 할 수도 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.