欢迎您光临本小站。希望您在这里可以找到自己想要的信息。。。

LinkedIn开源PalDB,一个只读的键值存储数据库

架构&设计模式 water 1050℃ 0评论

LinkedIn开源了PalDB,一个可嵌入的键值对存储数据库,比LevelDB快8倍,并且内存占用比hashset少数个量级。

PalDB是一个由LinkedIn开源并使用Java编写的一次写入键值存储数据库。当存储创建后所有的操作都是禁止的,它是只读的。这样做的目的是提升读操作的性能并降低内存占用。LinkedIn的建议是使用它来存储side data,他们对于side data的定义是“一个过程以完成其工作而需要的额外的只读数据。例如,被自然语言处理算法所使用的一系列已经停止使用的词汇就是side data”。

PalDB是可嵌入的,它不使用模式并将数据保存在二进制文件之中。它提供了随机数据访问的API

据LinkedIn所说,它优化了读操作,性能可与类似于HashMap和HashSet这样的常驻内存的数据结构一较高下,同时需要的内存显著减少,这些特性是公司在设计它时苦苦追求的。例如,一个含有100M键的hashset需要超过500MB的内存而PalDB只需要大约80MB。或者,35M个用户ID使用hashset存储需要1.8GB的内存而PalDB只需要290MB。在PalDB中使用Snappy来压缩数据的话将会使用更少的内存。

在速度方面,LinkedIn的性能测试显示PalDB拥有2M读/秒的性能,或者说比HashSet快6倍,比LevelDB或RocksDB快8倍,这个测试环境是MacBook Pro 3.1 GHz和一个10M-键索引。

PalDB优化了存储访问。将数据存储在磁盘上将会导致相当差的表现。尽管没有限制数据的大小,索引的大小限制为2GB。此外,重要的是要知道PalDB不是线程安全的。

PalDB, LevelDB 和 RocksDB 吞吐量比较(越高越好)

只读 Key-Value 存储系统:PalDB

PalDB 和一个 Java HashSet 内存使用比较(越低越好)

只读 Key-Value 存储系统:PalDB

编写一个存储:

StoreWriter writer = PalDB.createWriter(new File("store.paldb"));

writer.put("foo", "bar");

writer.put(1213, new int[] {1, 2, 3});

writer.close();

查看一个存储:

StoreReader reader = PalDB.createReader(new File("store.paldb"));

String val1 = reader.get("foo");

int[] val2 = reader.get(1213);

reader.close();

迭代

StoreReader reader = PalDB.createReader(new File("store.paldb"));

Iterable<Map.Entry<String, String>> iterable = reader.iterable();

for (Map.Entry<String, String> entry : iterable) {

  String key = entry.getKey();

  String value = entry.getValue();      

}

reader.close();

项目主页:http://www.open-open.com/lib/view/home/1446001437413

转载请注明:学时网 » LinkedIn开源PalDB,一个只读的键值存储数据库

喜欢 (0)or分享 (0)

您必须 登录 才能发表评论!