n- 그램으로 색인 된 데이터를 저장하기위한 효율적인 데이터베이스 모델


12

큰 텍스트 모음에 존재하는 매우 큰 n-gram 데이터베이스를 만들어야하는 응용 프로그램을 작성 중입니다.

효율적인 3 가지 연산 유형이 필요합니다 : n-gram 자체에 의해 색인 된 검색 및 삽입, sub-n-gram을 포함하는 모든 n-gram을 쿼리합니다.

데이터베이스가 거대한 문서 트리 여야하고 Mongo와 같은 문서 데이터베이스가 작업을 잘 수행 할 수 있어야하는 것처럼 들리지만 규모에 관계없이 사용하지는 않았습니다.

Stack Exchange 질문 형식을 알고 특정 기술에 대한 제안을 요구하는 것이 아니라 규모에 맞게 이와 비슷한 것을 구현 해야하는 데이터베이스 유형을 분명히하고 싶습니다.


2
구현하려는 구조는 "시도"라고 생각합니다. 해당 구조와 효율적으로 작동하는 DB를 찾을 수 있는지 또는 내가 말할 수없는 RDBMS에서 자신을 롤링 해야하는지 여부입니다.
Neil Slater

답변:


9

Lucene NGramTokenizer 참조

lucene 또는 이와 유사한 색인 기술을 사용할 수 있습니까?

거꾸로 된 색인은 n-gram을 한 번만 저장 한 다음 ngram을 포함하는 문서 ID 만 저장합니다. 그들은 이것을 고 중복 원시 텍스트로 저장하지 않습니다.

쿼리 하위 n- 그램을 포함하는 ngram을 찾는 경우 두 번째 lucene 색인 또는 trie 또는 suffix tree와 같은 다른 하위 문자열 색인을 사용하여 관찰 된 ngram에 대한 색인을 작성합니다 . 데이터가 역동적이라면 구문 쿼리를 사용하여 n- 그램을 찾는 lucene이 합리적인 선택 일 것입니다.


3

기본적 으로이 작업을 위해 B + 트리 기반 인덱스를 잘 지원하는 모든 SQL 데이터베이스를 효율적으로 사용할 수 있습니다 (MySQL은 스위트가 필요합니다).

3 개의 테이블을 만듭니다.

  1. 문서 테이블, 열 : id / document
  2. N- 그램 표 : n_gram_id / n_gram
  3. n- 그램과 문서 간 매핑 : document_id / n_gram_id

N-gram table / n_gram 문자열 및 Mapping table / n_gram_id에 인덱스를 생성하면 기본 키도 기본적으로 잘 인덱스됩니다.

당신의 작업은 효율적입니다 :

  1. 문서 삽입 : 모든 n- 그램을 추출하고 문서 테이블 및 N- 그램 테이블에 삽입
  2. 인덱스를 지원하여 in_gram을 빠르게 찾을 수 있습니다.
  3. 서브 -n- 그램을 포함하는 모든 n- 그램에 대한 쿼리 : 2 단계로-2 차 테이블의 서브 -n- 그램을 포함하는 모든 n- 그램을 색인을 기준으로 쿼리합니다. 그런 다음 각 n-gram에 해당하는 모든 문서를 검색하십시오.

이러한 모든 작업을 수행하기 위해 조인을 사용할 필요가 없으므로 인덱스가 많은 도움이됩니다. 또한 데이터가 한 시스템에 적합하지 않은 경우-한 서버에서 시작한 n_gram을 저장하고 다른 시스템 또는 다른 적합한 구성표에 oz를 저장하는 등 샤딩 구성표를 구현할 수 있습니다.

또한 MongoDB를 사용할 수 있지만 인덱싱 구성표를 정확히 어떻게 구현 해야하는지 잘 모르겠습니다. MongoDB의 경우 이미 내장되어 있으므로 샤딩 구성표가 무료로 제공됩니다.


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