2011-02-03 5 views
2

기본적으로 해시 테이블을 디스크에 저장하여 나중에 쿼리 할 수 ​​있습니다. 내 프로그램은 Java로 작성됩니다. 해시 테이블은 String에서 List로 매핑됩니다.Java 클라이언트가있는 키 - 값 데이터베이스

거기에는 많은 키 - 값 저장소가 있지만 많은 연구/읽기를 한 후에 어떤 것이 내 용도에 가장 적합한 지 분명하지 않습니다. 여기 나에게 중요한 몇 가지 것들이있다.

  1. 단일 키로 값을 검색 할 수있는 간단한 키 - 값 저장소입니다.
  2. 문서화 된 좋은 Java 클라이언트.
  3. 데이터 집합이 작고 고급 기능이 필요하지 않습니다. 다시 말하지만, 나는 그것이 단순하기를 바란다.

나는 Redis와 MongoDB를 살펴 보았다. 둘 다 유망 해 보이지만 내 목적에는 이상적이지 않습니다. 정보를 제공해 주시면 감사하겠습니다.

+0

왜 귀하의 목적에 이상적이지 않습니까? – dmcnelis

답변

2

답변 모든 종류의를 제공하기 전에, 나는 당신의 설명에 따라 같은 디스크에 해시 테이블을 저장해야 할 이유는 자신을 요구해서 시작 했죠 데이터 세트는 작기 때문에 메모리에 맞출 수 있다고 가정합니다. 응용 프로그램을 다시 시작한 후에이 구조체를 재사용 할 수 있다면 모든 형식을 유지하여이를 유지할 수 있습니다.

둘째, Redis 또는 MongoDB가 이상적이지 않은 이유를 제공하지 않습니다.

  • (목록을 저장할뿐만 아니라리스트 값에 대한 작업을 지원 할 수 데이터 그래서뿐만 아니라

    • 좋은 자바 클라이언트 : 당신의 (짧은) 3 개 요구 사항에 따라, 나는 레디 스 아마 가장 좋은 건 말했다 것 불투명하지 않다)

    내가 Redis를 제거한다고 가정 할 수있는 유일한 이유는 엄격한 ACID 특성을 찾고 있다는 것입니다. 그것이 BerkleyDB JE에서 살펴볼 수있는 것보다 당신이 찾고있는 것이라면. 그것은 한동안 주변에 있었고 문서는 훌륭합니다.

  • 3

    데이터 세트가 작고 간단한 것이 원하는 경우. 왜 해시 맵을 파일이나 rdbms로 직렬화하지 않고 응용 프로그램에로드합니까?

    어떻게하면 해시 맵을 "쿼리"하지 않으시겠습니까? 열쇠 근사? 가치 '유사성'? 나도 몰라, 그냥 키 값 저장을 위해 저에게 잔인한 것처럼 보입니다.

    4

    에서 무엇을 본 적이 감동했다. 이 라이브러리는 API와 같은 간단한 컬렉션을 제공하도록 설계되었습니다. 아래에는 컬렉션으로 작업 할 수있는 라이브러리는 거의 없지만 배후에서는 디스크 스토리지를 사용합니다.

    1. space4j
    2. Advagato
    3. Prevayler
    +2

    Space4j도 투명한 클러스터 및 인덱싱을 제공합니다. – TraderJoeChicago

    0

    Chronicle Map은 완벽하게 적합해야하며 순수 자바로 작성된 임베디드 키 - 값 저장소이므로 가능한 "클라이언트"또는 "서버"가 없어도 최상의 "클라이언트"로 작동합니다. 귀하의 데이터베이스 및 그것을 전체 읽기/업데이트 프로세스 내에서 액세스 할 수 있습니다).

    크로니클 맵은 하나의 파일에 있습니다. 이 파일은 파일 시스템을 중심으로 이동할 수 있으며 심지어는 OS 및/또는 아키텍처가 다른 다른 컴퓨터로 전송되어 개방형 크로니클 맵 데이터베이스가 될 수도 있습니다.

    는 (그렇지 않으면 기존 상점에 액세스 할 때, 그것은 생성, 데이터베이스 파일이 존재하지 않는 경우) 만들거나 데이터 저장소를 열려면 :

    ChronicleMap<String, List<Point>> map = ChronicleMap 
        .of(String.class, (Class<List<Point>>) (Class) List.class) 
        .averageKey("range") 
        .averageValue(asList(of(0, 0), of(1, 1))) 
        .entries(10_000) 
        .createPersistedTo(myDatabaseFile); 
    

    그런 다음 사용자가 만든 ChronicleMap 객체와 마찬가지로 작업 할 수 있습니다 단순한 HashMap으로, 키와 값의 직렬화에 신경을 쓰지 않아도된다.

    관련 문제