2011-05-15 2 views
5

나는 수백만 개의 XML 파일을 저장하고 검색하는 간단한 방법을 찾고있다. 현재 모든 것은 성능 문제가있는 파일 시스템에서 수행됩니다.간단하고 고성능의 파일 저장을위한 Bitcask ok?

우리의 요구 사항은 다음과 같습니다 일괄 처리에 XML-수백만 개의 파일을 저장하는

  1. 능력. XML 파일은 최대 100KB 범위의 몇 메가 큰 파일 일 수 있습니다. 나는 여러 NoSQL에 한 번 봐 있었나요

ID로

  • 매우 빠른 임의 조회 (예 : 문서 URL) 가장 중요한 리눅스 배포판에
  • 가능한 자바와 펄 모두
  • 액세스 및 Windows 이러한 시스템이 좋아 보인다 동안 -Platforms (예 : CouchDB를, Riak 및 기타), 그리고, 그들은 거의 과잉 beeing는 것처럼 보일 :

    1. 없음 클러스터링
    2. 을 할 필요가 없습니다
    3. 없음 데몬 ("서비스") 내가 원하는 정확히 것 같아 Bitcask을 (intro 참조), 발견,
    4. 없음 똑똑한 검색 기능이

    Riak 더 깊이 탐구 데

  • 을 할 필요가 없습니다 필요하지 않습니다. 인트로에 설명 된 기본 사항은 정말 흥미 롭습니다. 그러나 불행하게도 자바를 통해 bitcask의 REPO에 액세스 할 수단이 없다 (또는이?)

    는 김 제 질문은

    • 다음과 같은 가정에서 오른쪽 아래로 비등 다음 Bitcask 모델 (추가 전용 기록, 메모리 내 키 관리)은 수백만 개의 문서를 저장/검색하는 올바른 방법입니다.
    • Java를 통해 Bitcask를 사용할 수 있습니까? (BerkleyDB가 떠오른다 ...)
    • (riak 전문가 용) Riak은 "벌거 벗은"Bitcask에 비해 많은 오버 헤드 구현/관리/리소스가 현명한가요?
    +1

    과용. 그들이 사용하기 쉽고, 아마도 임베디드 될 수 있다면, 그들은 또한 좋은 적합 할 수 있습니다 ... 무엇을 할 수있는 일은 더 적은 것을 할 수 있습니다. –

    답변

    5

    저는 Bitcask가 여러분의 사용 사례에서 잘 작동 할 것이라고 생각하지 않습니다. Bitcask 모델은 각 값의 크기가 상대적으로 작은 사용 사례에 맞게 설계되었습니다.

    문제는 Bitcask의 데이터 파일 병합 프로세스에 있습니다. 여기에는 여러 "이전 데이터 파일"의 모든 라이브 값을 "병합 된 데이터 파일"로 복사하는 작업이 포함됩니다. 100Kb의 영역에 수백만 개의 값이있는 경우 이것은 미친 양의 데이터를 복사하는 것입니다.

    +0

    입력 해 주셔서 감사합니다. 그것을 테스트해야합니다 – KoW

    +0

    @kindofwhat - 좋은 생각. 내 답변은 그것이 어떻게 작동 하는지를 설명하는 종이를 읽은 것을 전적으로 기반으로합니다. 저자에게 물어 보는 것도 또 다른 아이디어입니다. –

    +0

    @StephenC Bitcask 모델은 값이 훨씬 크고 키가 큰 경우를 위해 설계되었습니다. bitcask는 해시 테이블에 모든 키를 넣을 것이고 해시 테이블은 메모리에 저장되기 때문에. 값이 비교적 작 으면 많은 키가있을 수 있으며 전체 키를 저장할 메모리가 충분하지 않습니다. 당신이 말했듯이, Bitcask는 작고 조작이 가능합니다. 디스크 공간과 쓰기 증폭 사이의 균형이 있습니다. 쓰기 증폭이 두려워하는 경우에는 컴팩트하지 않아도되고 필요할 때 압축 할 수 있습니다. 그리고 사용 사례에서 XML 데이터 변경은 거의 작동하지 않는 것 같습니다. – baotiao

    4

    많은 경우 덮어 쓰기 여부에 따라 비트 캐스 크가이 경우에 적합 할 수 있습니다 (큰 값). 특히 오래된 값과 동일한 키를 사용하여 새 값이 도착할 때만 낭비되는 많은 공간이 없으면 파일을 병합 할 이유가 없습니다.

    Bitcask는 들어오는 데이터 스트림을 디스크에 곧바로 쓸 것이므로이 배치 일 경우에 특히 좋습니다. 조회는 시간상의 지역성이있는 경우 파일 캐시가 도움이되지만 대부분의 경우 하나의 검색을 수행합니다.

    Java 버전/래퍼의 상태가 확실하지 않습니다.

    +0

    Bitcask API의 "기본"Java [구현] (https://github.com/krestenkrab/bitcask-java)가있는 것 같습니다. 병합은 아직 구현되지 않았으므로이 구현을 사용하여이 사례를 테스트하기가 어렵습니다. – KoW

    관련 문제