가장 효율적인 데이터 인덱싱 기술은 무엇입니까


10

우리 모두 알다시피, Lucene (java의 경우) 또는 Lucene.NET (.NET의 경우), MurMurHash, B + Tree 등과 같은 잘 알려진 색인 앱에서 사용하는 일부 데이터 색인 기법이 있습니다. No-Sql / Object의 경우 지향 데이터베이스 (C #으로 약간 쓰고 쓰려고 시도), 어떤 기술을 제안합니까?

MurMurhash-2에 대해 읽었으며 특히 v3 의견에 따르면 Murmur는 매우 빠릅니다. 또한 Lucene.Net에 좋은 의견이 있습니다. 그러나 일반적으로 메모리 공간은 어떻습니까? Lucene 또는 Murmur보다 풋 프린트를 적게 사용하는 효율적인 솔루션이 있습니까? 또는 최상의 결과를 얻으려면 특수 색인 구조를 작성해야합니까?

내가 직접 작성하려고하면 데이터 노드의 1 % 또는 데이터 노드의 5 %와 같은 좋은 인덱싱에 허용되는 규모가 있습니까? 유용한 힌트를 주시면 감사하겠습니다.

답변:


10

나는 당신이 당신의 질문에서 몇 가지를 엉망으로 생각합니다. Lucene (Lucene, NET에 대해서는 아무것도 모르지만 동일하다고 가정)은 나중에 쿼리하고 검색 할 수 있도록 토큰을 분석하고 토큰으로 나누고 문서를 저장하는 데 사용되는 라이브러리입니다. Lucene은 꽤 오래되었지만 효과적인 모델이며 반전 트리를 사용하여 문서를 찾고 검색합니다. 자세한 내용이 없으면 모든 문서가 토큰 (용어)으로 분할되며 각 용어에 대해 주어진 용어가 포함 된 모든 문서를 저장하는 데이터 구조가 유지됩니다. 데이터 구조를 BTree, 해시 테이블 및 최신 주요 개정판으로 사용할 수 있으므로 자체 데이터 구조를 연결할 수도 있습니다.

BTree (자세한 내용은 Wikipedia 페이지 참조)는 일종의 트리 데이터 구조로, 많은 양의 데이터를 처리하는 데 적합하며 종종 트리와 같이 정렬 된 구조를 디스크에 저장하는 데 사용됩니다. 인 메모리의 경우 다른 트리가 더 잘 수행됩니다.

Murmur 해시 (자세한 내용은 Wikipedia 페이지 참조)는 해시 테이블에 사용되는 해시 함수 제품군입니다. 해시 테이블의 구현은 중요하지 않으며 표준 체인 구현 또는 고급 개방형 해시 주소 지정 체계 일 수 있습니다. 해시 테이블을 사용하면 정렬되지 않은 키 세트에서 키를 빨리 가져올 수 있으며 다음과 같은 작업에 응답 할 수 있습니다.이 키가이 키 세트의 일부입니까? 이 키와 관련된 값은 무엇입니까?

이제 주요 문제로 돌아갑니다. 하나의 라이브러리 (Lucene)와 데이터 구조가 있으며 두 데이터 구조 모두 Lucene에서 사용됩니다. 이제 귀하는 귀하의 질문에 대해 비교할 수 없으므로 귀하의 질문에 답변 할 수 없습니다.

그러나 당신의 발자국과 성능 부분에 대해서는 우선 어떤 종류의 작업을 구현해야하는지 알아야합니다.

키 값만 가져 오거나 범위 내의 모든 요소를 ​​찾아야합니까? 즉, 주문이 필요합니까? 그렇게하면 나무보다 도움이 될 수 있습니다. 그렇지 않으면 해시 테이블보다 빠른 것이 대신 사용될 수 있습니다.

메모리에 맞지 않는 많은 데이터가 있습니까? 그렇다면 BTree와 같은 디스크 기반 솔루션보다 도움이 될 것입니다. 데이터가 메모리에 맞는 경우 가장 빠른 인 메모리 솔루션을 사용하고 디스크를 스토리지로만 사용하십시오 (다른 구조의 경우 훨씬 단순함).


대단히 감사합니다 : Rapaio :) 당신이 나에게 준 포인트는 매우 유용하고 더 분명합니다. .NET 개발자이기 때문에 일반 C (학습을 시작합니다)와 새롭고 빠르고 신뢰할 수 있으며 확장 가능한 ancd에 대해 궁금합니다. 물론 단기간에 완전히 제어 할 수있는-매우 흥분된 기술.. 그래서 나는 매우 많은 것을 배울 필요가있다. 배우기 위해, 나는 많은 문서를 읽으려고 노력하지만 당신은 내가 출발 선에 있다고 생각할 수있다. 내가 BTREE 디스크에 장점을 가지고 몰랐 (에서 닷넷 세계는, 많은 작가처럼 설명 : 링크 - List..No 같은 계층 적 데이터 구조 더!) 정말 다시 한번 감사드립니다
sihirbazzz

그리고 당신이 나를 허용한다면, 당신보다 더 높은 품질의 설명 / 답변이있을 때까지, 나는 이것을 대답으로 받아들이고 싶습니다. 그리고 BTW, Lucene.NET은 Java의 Lucene
sihirbazzz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.