基于Java客户端的键值数据库

基于Java客户端的键值数据库,java,mongodb,redis,database,nosql,Java,Mongodb,Redis,Database,Nosql,我基本上想在磁盘上存储一个哈希表,以便以后查询它。我的程序是用Java编写的。 哈希表从字符串映射到列表 有很多关键价值商店,但在做了大量的研究/阅读后,我不清楚哪一个对我来说是最好的。以下是一些对我很重要的事情 简单的键值存储,允许您使用单个键检索值 良好的Java客户机,有很好的文档记录 数据集很小,不需要高级功能。同样,我希望它是简单的 我调查过Redis和MongoDB。两者看起来都很有希望,但对我来说并不理想。 如果您的数据集很小,并且希望它简单,请提供任何信息。。为什么不将hashm

我基本上想在磁盘上存储一个哈希表,以便以后查询它。我的程序是用Java编写的。 哈希表从字符串映射到列表

有很多关键价值商店,但在做了大量的研究/阅读后,我不清楚哪一个对我来说是最好的。以下是一些对我很重要的事情

  • 简单的键值存储,允许您使用单个键检索值
  • 良好的Java客户机,有很好的文档记录
  • 数据集很小,不需要高级功能。同样,我希望它是简单的
  • 我调查过Redis和MongoDB。两者看起来都很有希望,但对我来说并不理想。
    如果您的数据集很小,并且希望它简单,请提供任何信息。

    。为什么不将hashmap序列化为文件或rdbms并将其加载到应用程序中

    你怎么不去“查询”你的hashmap呢?关键近似?“相似性”价值观?我不知道,仅仅为了维护一个keyvalue存储对我来说似乎有些过分。

    查看JDBM2-


    我在JDBM 1代码库工作,在jdbm2中看到的东西给我留下了深刻的印象,您正在寻找的是一个支持JDBM 1的库。这些库设计得简单而快速,提供了类似API的集合。下面是一些这样的库,它们允许您使用集合,但在幕后使用磁盘存储


  • 在给出任何答案之前,我首先要问自己,为什么我需要将这个哈希表存储在磁盘上,因为根据您的描述,数据集很小,所以我认为它可以放入内存中。如果只是为了能够在重新启动应用程序后重用此结构,那么您可能可以使用任何格式来持久化它

    其次,您没有提供Redis或MongoDB不理想的任何理由。基于您的(简短的)3个要求,我会说Redis可能是您最好的选择:

    • 优秀的Java客户端
    • 不仅能够存储列表,还支持对列表值的操作(因此数据不不透明)
    我认为消除Redis的唯一原因是您正在寻找严格的ACID特性。如果这就是你想要的,那么你可能会看看伯克利。它已经存在了一段时间,文档也很好。

    应该是一个完美的选择,它是一个用纯Java编写的可嵌入键值存储,因此它可以作为最好的“客户机”(虽然实际上没有“客户机”或“服务器”,但您只需打开数据库并对其进行完整的读取/更新进程内访问)

    编年史地图驻留在单个文件中。这个文件可以在文件系统中移动,甚至可以发送到具有不同操作系统和/或体系结构的另一台机器上,并且仍然是一个可打开的历史地图数据库

    要创建或打开数据存储(如果数据库文件不存在,则创建该文件,否则访问现有存储):

    chronicmap-map=chronicmap
    .of(String.class,(class)(class)List.class)
    .averageKey(“范围”)
    .averageValue(asList(of(0,0),of(1,1)))
    .参赛作品(万份)
    .createPersistedTo(myDatabaseFile);
    

    然后,您可以像处理简单的
    HashMap
    一样处理创建的
    编年史映射
    对象,而不必处理键和值序列化

    为什么它们不适合您的目的?Space4j还提供透明的群集和索引。
    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);