什么是RocksDB?
RocksDB是一个用于快速存储的可嵌入持久键值存储。ROCKSDB也可以是客户机-服务器数据库的基础,但我们目前的重点是嵌入式工作负载。
RocksDB构建在LevelDB之上,可以在具有许多CPU核心的服务器上运行,可以高效地使用快速存储,支持IO绑定、内存中和一次写入的工作负载,并且可以灵活地进行创新。
性能如何比较?
我们对LevelDB进行了基准测试,发现它不适合我们的服务器工作负载。基准测试结果乍一看非常棒,但是我们很快意识到这些结果是针对一个数据库的,这个数据库的大小小于测试机器上RAM的大小,整个数据库都可以放入OS页面缓存中。当我们在一个至少比主存大5倍的数据库上执行相同的基准测试时,性能结果令人沮丧。
相比之下,我们在Flash上发布了服务器端工作负载的RocksDB基准测试结果。我们还测量了LevelDB在这些服务器工作负载基准上的性能,发现RocksDB在这些受IO限制的工作负载上的性能明显优于LevelDB。我们发现LevelDB的单线程压缩过程不足以驱动服务器工作负载。我们看到LevelDB经常出现写暂停,导致99%的延迟非常大。我们发现,将文件映射到操作系统缓存会导致读取的性能瓶颈。我们无法让LevelDB使用底层闪存提供的所有IOs。
RocksDB适合做什么?
RocksDB可用于需要低延迟数据库访问的应用程序。可能性包括:
- 一种面向用户的应用程序,用于存储网站用户的查看历史和状态。
- 需要快速访问大数据集的垃圾邮件检测应用程序。
- 需要实时扫描数据集的图形搜索查询。
- 缓存来自Hadoop的数据,从而允许应用程序实时查询Hadoop数据。
- 支持大量插入和删除的消息队列。
RocksDB的采用有多大?
RocksDB是一个嵌入式存储引擎,用于Facebook的许多后端系统。在Facebook新闻源的后端,它取代了另一个名为离心机的内部存储引擎,是使用的众多组件之一。ZippyDB是Facebook产品使用的分布式键值存储服务。Dragon是social graph基础设施的分布式图形查询引擎,它使用RocksDB存储数据。Parse自2015年初开始在RocksDB上运行MongoDB。
RocksDB被证明是行业中许多其他组织的有用组件。
RocksDB作为一个数据库存储引擎有多好?
我们在Facebook的工程团队坚信RocksDB作为数据库的存储引擎具有巨大的潜力。MongoDB已经在生产中得到了验证:MongoRocks是MongoDB的基于RocksDB的存储引擎。
MyRocks是基于RocksDB的MySQL存储引擎。使用RocksDB,与现有的MySQL设置相比,我们的基准测试实现了2倍的压缩和10倍的写放大。鉴于我们目前的结果,目前正在进行的工作是将MyRocks开发成一个可用于web规模MySQL工作负载的生产解决方案。GitHub地址:https://github.com/facebook/mysql-5.6
为什么RocksDB是开源的?
RocksDB团队在GitHub上开源这个项目,因为我们认为它在Facebook之外会很有用。我们希望软件程序员和数据库开发人员能够针对他们的用例使用、增强和定制RocksDB。我们还希望与学术界就现代数据库算法的效率相关的话题进行交流。
官网地址:https://rocksdb.org
除特别注明外,本站所有文章均为老K的Java博客原创,转载请注明出处来自https://javakk.com/1755.html
暂无评论