2009-06-23 5 views
0

많은 Java 등록 정보 및 매니페스트 파일을 색인화해야합니다.인덱싱 등록 정보 파일

파일의 데이터는 키 - 값 쌍입니다.

나는 이것을 위해 Lucene을 사용하려고 생각하고 있습니다.

그러나 데이터가 상당히 구조화되어 있으므로 실제 전체 검색 기능이 필요하지 않습니다. 속성 값의 정확한 일치를 검색하기 만하면되며 속성 키는 항상 알려져 있습니다. 토큰화할 필요가 없으며 "기본"필드도 없습니다. 고유 한 등록 정보 키의 수가 꽤 클 수 있습니다.

또한 나는 (RAMDirectory가 될 Lucene에서) 인덱스를 전체적으로 메모리에 유지할 수 있기를 바랍니다.

그래서 Lucene (주로 전체 텍스트 검색 엔진)은 여전히 ​​좋은 성냥입니까? 그렇지 않으면 더 잘 맞는 것이 있습니까?

업데이트 : 그것은 트리플을 유지하기 위해 적어도 중첩의 HashMap (값, 키가 될 필요가 값 B. 재산 A를 정의하는 파일을 찾으려하기 때문에 간단한의 HashMap는하지 않을 것이다 , 파일 이름).

+0

키 - 값 쌍의 수가 메모리 내 해시 맵을 제외 할만큼 충분히 큽니까? 그들을 임베디드 SQL 서버로 인덱스 할 수 있습니다. – akarnokd

+0

그래, 난 내장 된 SQL에 대해 생각했다. 문제는 키를 열로 사용할 수 없다는 것입니다. 숫자가 많아서 키 값이 미리 알려지지 않았기 때문에 키 - 값 매핑 테이블 일 필요가 있기 때문입니다. – Thilo

+0

키를 열로 사용하는 이유는 무엇입니까? 그냥 (파일, 키, 값) 삼중 항을가집니다. – akarnokd

답변

2

예, 키당 토큰 화되지 않은 필드가있는 Lucene 색인이 트릭을 수행합니다. 그것은 약간의 잔인한 부분이기도합니다. 어떤 종류의지도 구조가 아마도 당신이 묘사하는 것에 충분할 것입니다.

여기서 Lucene을 사용하면 얻을 수있는 주요 이점은 세부 정보를 상당히 간단한 API로 추상화한다는 것입니다.

+0

단일 토큰 화되지 않은 필드? 그것은 속성마다 별도의 필드가 아니겠습니까? – Thilo

+0

Thilo, 당신 말이 맞아, 나는 그가 찾고, 편집하고 싶은 것을 실제로 오해하고있다. –

0

나는 간단한 HashMap으로 시작하고, 메모리 문제가 생기면 Lucene과 같은 좀 더 복잡한 것으로 옮겨 간다. HashMap이 얼마나 효율적인지 놀랄 것입니다.

정말 간단하게 시작하려면 Properties 개체 자체를 사용하십시오.이 개체는 HashTable의 인스턴스입니다 (HashMap vs HashTable 참조). load(Inputstream)을 사용하여 여러 속성 파일을 간단한 개체로 쉽게로드 한 다음 HashMap을 시도한 경우 new HashMap(propertiesObject)을 사용하여 전환 할 수 있습니다.

+0

물건은 하나의 속성이 아니라 많은 속성 개체를 가지고 있으며, 속성 내에서 속성 파일을 검색하려고한다. 파일. "a = b"라고하는 파일 목록을 가져와야합니다. – Thilo

+0

아, 조금 더 명확합니다. 고유성을 보장 할 수 있다면 텍스트로 읽은 다음 각 줄을 키로 만들고 파일 이름을 값으로 만들 수 있다고 생각합니다. 그러나 그 시점에서 데이터베이스 유형 솔루션이 더 좋을 것이라고 생각합니다. – Spyder

0

전체 텍스트 검색이 필요하지 않고 큰 키 - 값 맵만 표시하려는 경우 Lucene이 부적절하다고 제안합니다.

저는 EhCache와 같은 것을 제안합니다. 이것은 당신이 RAM에있는 많은 양의 데이터를 저장할 수있게 해주지 만 너무 커지면 디스크 파일로 스왑 아웃 할 수 있습니다.

+0

정말 하나의 큰 키 - 값지도가 아닙니다. 더 큰 키 - 값지도를 많이 검색하는 것과 같습니다 (내외부 검색). 예를 들어 "a = b"와 "c = d"라고 말하는 모든지도를 찾고 싶습니다. – Thilo

0

을보세요. 경량의 오픈 소스 오브젝트 데이터베이스로, 빠른 B + Tree 구현이 가능합니다. 높은 신뢰성이 필요하지 않은 경우 데이터베이스의 로그 부분을 해제 할 수 있습니다 (쓰기 도중에 정전이 발생하면 데이터베이스가 손상 될 위험이 있으므로 훨씬 빨리 삽입 할 수 있습니다).

우리는 4,5 년간 여러 프로덕션 프로젝트에서 jdbm을 사용하여 정말 큰 데이터 세트를 사용했습니다.

전체 색인을 메모리에 저장할 수 있으면 TreeMap (또는 역 색인 생성이 필요한 경우 여러 TreeMaps)을 사용하는 것이 더 나을 것입니다. 저장해야하는 경우 직렬화하면됩니다. 디스크.

+0

+1 임베디드 db. 주석을 보면 고전적인 앞뒤 색인 테이블이 사용 사례로 충분할 것으로 보인다. – akarnokd

관련 문제