BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 Abel Avram 关注 10 他的粉丝 ,译者 百占辉 关注 0 他的粉丝 发布于 2015年10月30日. 估计阅读时间: 2 分钟 | AICon 关注机器学习、计算机视觉、NLP、自动驾驶等20+AI热点技术和最新落地成功案例。

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不是线程安全的。

查看英文原文:LinkedIn Open Sources PalDB, a Read-only Key-value Store


感谢张龙对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群InfoQ好读者)。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

线程不安全有影响么? by 萧遥 任

既然是只读存储数据库,那还需要什么线程安全么?不过只读中的读的数据从哪里来呢?

Re: 线程不安全有影响么? by 张 凯

第二段的开头不是说了吗,一次性写入的只读数据库,当存储创建完成后,数据库禁止一切操作。

不错,可以尝试下 by yan alex

不错,可以尝试下

基本就是hashmap 持久化到文件 by r rmjmr

看了源码,几个关键点
1. 按key length 做partition了,避免过大
2. 开放寻址法的hash map设计
3. 划分索引文件,和value文件, 用mmap方式查找

想起了MapDB,差不多

M是什么单位? by Li Tianwang

35M个用户ID

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

5 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT