facebook 为什么设计gorocksdbb

Facebook 正在打造下一代开源硬件,将新技术融入其数据中心平台,Facebook使用大量强大科技——包括固态硬盘(SSDs), 图形处理器(GPUs), 非易失性存储器(NVM)和闪存簇(JBOFs)——以打造新的服务器和存储装置,加速基础设施。这些升级是Facebook打造强大数据中心网络的一部分,这一网络将扩展互联网服务的边界。「接下来的十几年,我们的体验将更加依赖于人工智能和虚拟现实这类技术,」Facebook CEO 马克·扎克伯格说。「这对计算性能提出了更高要求,通过开放计算项目(Open Compute ,以下简称OCP),我们正在开发全球性的基础设施,让人人都能享受互联网服务。」Facebook在开放计算峰会(Open Compute Summit,以下简称OCS)上公布了项目进展。OCS是不断扩大的开源硬件社区成员的聚会,他们设计的产品在Facebook的数据服务器上焕发活力。峰会展示了许多基础设施的升级。包括:重新打造的服务器尺度形态来在同等能源消耗数量下提升性能。新的高性能数据分析服务器,由GPUs,而非CPUs。改进后的存储设备分隔单位(storage sled),在这里,最初的JBOD(just a bunch of disks)变成快得多的JBOF(just a bunch of )。改进非易失性存储器(NVM)实验,为存储分层提供更多选择。△ Jason Taylor此次峰会标志着OCP项目成立五周年,也促使人们反思自2011年Facebook为推动其发布的设计创新而成立该项目以来,OCP 的发展情况。「我们现在取得的进步是值得关注的,」OCP 项目董事长Jason Taylor 表示,他同时也是Facebook Infrastructure 部门副总裁之一。「OCP就是一个让工程师聚在一起,创造惊艳产品的地方。」「我感受到了巨大的动力,因为我们超越了超大型主机(hyperscale),还进入了金融和电信领域,」他说。服务器:下一代设计Facebook 彻底革新了服务器设计和基础设施,从传统的双服务器处理器转为基于单个英特尔Xeon-D处理器系统芯片(SoC),该处理器耗能更少,还解决了几个架构问题。The Mono Lacke服务器的主板装入到一个叫Yosemite的组装单位中,Yosemite的每一个滑动单元底架上可以安装4个SoC,即4个Mono Lake。Facebook 工程师Vijay Rao 和Edwin Smith在Facebook 工程博客上描述了这一新设计。△ 如图「我们就新处理器的设计与英特尔紧密合作,同时重新设计自家的服务器基础设施以打造一个满足我们需求的系统,也能为行业其他公司所广泛采用。」他们在博客中写道。「结果表明,配备更低功耗的CPUs 的单处理器服务器在网络负载上比双处理器服务器表现更好,也更适合数据中心负载…与此同时,我们重新设计的服务器基础设施,在同等电源基础上,容纳每个机架双倍的CPUs数量。」新的设计提升了处理器和处理器之间、处理器和内存之间的通信效率。「我们将CPU简化至正好能满足我们要求,」这两位工程师表示,「我们移除了QPI链接,缩减了英特尔的成本。考虑到我们的服务器将基于同一的插槽,这也解决了我们NUMA问题。我们将其设计为整合芯片集的系统芯片,更加简单。这种接口一致的CPU散热设计功耗(TDP)更低。与此同时,我们重新设计的服务器基础设施,在同等电源条件下,容纳每个机架双倍的CPUs数量。」这使得Facebook制造出一个可以在每个机架上获得更高性能的服务器体系结构,同时确保每个机柜能量消耗密度保持在11千瓦以下。强大的人工智能数据分析服务器Facebook 在会上还分享了GPUs最新进展,近年来,GPU在高性能计算中发挥了重要作用。GPUs 最初是用于提升桌面PC性能,处理图形运算,但是现在却帮助提升全球一些性能最强大的超级计算机。Facebook 使用GPUs给人工智能和机器学习数据分析带来更强大的计算能力。其人工智能实验室训练神经网络去解决新问题。这就需要强大的计算能力。「我们已经在人工智能技术方面投入了很多。」Facebook 工程和基础设施(Engineering and Infrastructure)部门 全球老大Jay Parikh说,「目前,人工智能应用于Facebook的Newsfeed,帮助我们提供更好的广告服务。也能帮助用户在日常生活中更安全地使用Facebook。」△ Facebook 的 Big SurBig Sur 系统使用了英伟达Tesla 加速计算平台,拥有8个高性能GPUs,每个功率达300瓦特,在多个PCI-e连接之间灵活配置。Facebook已经优化了这些新型服务器的发热和功耗控制,使其可以与数据中心中配备标准CPU的服务器协同工作。Big Sur 系统优化了性能和反应时间,帮助Facebook处理更多的数据,极大地缩短了其训练神经网络的时间。「性能有了极大的提升,」Parikh说,「我们在数月间就部署了数千台这种机器。使得我们有能力将该技术应用于公司更多的产品实例。」存储:Just a buch of Flash多年来,Facebook已经在用闪存来加速服务器引导驱动,提升缓存效率。随着公司基础设备进一步扩大规模,Facebook创造了一种新型「模块」,在服务器运算中整合更多的闪存。Facebook已经改进了初代开放计算机——即Knox——的存储驱动器,使用固态硬盘(SSDs)取代存储硬盘存储(HDDs),存储单元从磁盘簇(JBOD)转到了闪存簇(JBOF)。Facebook和英特尔合作开发这种新型的闪存簇单元,称之为Lighting,反应了使用NVMe带来了速度提升,NVMe是为SSDs优化的高速PCI总线接口。下面我们通过Parikh 在开放计算峰会上展示的幻灯片来看看具体的参数。△ 参数作为一个分散式(disaggregated)存储设备,Lightning 支持各种不同的应用。「这为我们正在开发的应用带来了一个高性能存储式的新型建造模块。」Parikh说。Parikh表示将来会有更多存储方面的创新,尤其是创新地使用非易失性存储器(NVM)。「在存储行业,磁盘驱动器还在持续扩大,但是可靠性和反应时间并未变得更好,IOPS (每秒读写次数)也没有提升。」Parikh 表示,「闪存小有进步,但是耐久性也没有极大地提升。我们陷入这样一个模式:规模在不断扩大,但是从性能的角度看,我们并未获得真正需要的。」Facebook在新型的NVM应用方面,尤其是英特尔和镁光共同开发的3D XPoint技术,看到了潜在答案。Parikh 呼吁开放计算社区将重点放在该技术上,或能解决存储行业面临的挑战。Parikh说,我们可以(基于这些选择,指NVM,Flash等不同技术)开始思考我们的存储问题,把存储需求进行分级(按照性能,容量)布局,带给我们更多的价格和性能杠杆,实现性能或者储能的拓展,或者对成本进行优化。他表示NVM 是介于DRAM 和NAND 之间一个值得关注的。Facebook 正在MyRocks开源项目测试NVM 配置,该项目是基于和RocksDB 数据库技术之上。前路漫漫:为到来的数据洪流进行扩展Facebook不遗余力地推动更快、性能更强的基础设施建设的原因在于用户增长,目前,Facebook用户数达到10.6亿、WhatsApp 10亿、Facebook
8亿、 4亿。扎克伯格在虚拟现实领域的野心也是推动因素之一,Facebook 20亿美元收购虚拟现实先驱Oculus就是明证。虚拟现实可提供沉浸式3D体验,很多分析人士认为,虚拟现实技术的黄金期即将到来。扎克伯格相信Facebook可赋予其社交网络虚拟现实体验。「很快,我们将生活在一个人人都可以身临其境般分享和体验全部场景的世界,」扎克伯格在近期的世界移动通信大会(MWC)上说。「想象一下,你可以在任何时候你都可以坐在篝火前,与朋友待在一起;或者在任何时间都可以与朋友们在私人电影院看电影。想象下在全球任意一个角落开会或举办大会。所有这些都将成为现实,这也是为什么Facebook这么早在大力投资虚拟现实,我们真的很希望提供这些社交体验。」这对基础设施建设提出了极高的要求,完整的虚拟现实视频容量大小是现在的高清视频的20倍之多。「超大的文件或成为高质量、大规模地推广或虚拟现实的障碍,」Facebook的Evgeny Kuzakov and David Pio 写道,他们近期概述了虚拟现实文件的解码和技术的进展。Facebook 在360视频上正从等距柱状投影布局(equirectangular layouts)迁入使用立方体版式(cube format ),文件大小减少了25%。但是,Facebook意识到虚拟现实视频实时推送需要更快的网络,Facebook无法独立实现。所以Facebook仿照开放计算的模式,提出了Telecom Infra Project 项目,与Equinix、英特尔、诺基亚、SK电讯、T-Mobile和德国电信共同开发5G网络,加速全球网络发展。「为了迎接全球(视频和虚拟现实)的数据挑战,传统电信基础设施的升级不及人们所需,」Parikh 表示,「对迎接这些新的技术挑战、发现新的机遇来说,加快电信基础设施的创新步伐,很有必要。」来源/机器之心,参与人员:陈刚、微胖
投诉欺诈商家:
天津重庆哈尔滨沈阳长春石家庄呼和浩特西安太原兰州乌鲁木齐成都昆明贵阳长沙武汉郑州济南青岛烟台合肥南京杭州东莞南宁南昌福州厦门深圳温州佛山宁波泉州惠州银川
本城市下暂无经销商
下载中关村在线Android 客户端
下载中关村在线 iPhone 客户端
下载中关村在线Windows8客户端
成为中关村在线微信好友meng_philip 的BLOG
用户名:meng_philip
文章数:242
评论数:17
访问量:32336
注册日期:
阅读量:5863
阅读量:12276
阅读量:370973
阅读量:1065332
51CTO推荐博文
Table of ContentsLeveldb 2011年7月开源, 到现在有3年了, 原理上已经有很多文章介绍了, 我们就不多说.其中最好的是淘宝那岩写的&leveldb 实现解析&和 TokuMX作者写的那个300页ppt:&A Comparison of Fractal Trees&toLog-Structured&Merge (LSM) Trees&(这个PPT 对读放大写放大分析很好, 值得再读一次)最近基于LevelDB, RocksDB 做了一点东西, 我们的目标场景是存储平均50K大小的value, 遇到一些问题, 总结一下:当L0文件达到12个, 而compaction来不及的时候, 写入完全阻塞, 这个阻塞时间可能长达10s.LevelDB实现上是L0达到4个时开始触发compaction, 8个时开始减慢写入, 12个时完全停止写入. 具体配置是写死的, 不过可以在编译时修改://&Level-0&compaction&is&started&when&we&hit&this&many&files.
static&const&int&kL0_CompactionTrigger&=&4;
//&Soft&limit&on&number&of&level-0&files.&&We&slow&down&writes&at&this&point.
static&const&int&kL0_SlowdownWritesTrigger&=&8;
//&Maximum&number&of&level-0&files.&&We&stop&writes&at&this&point.
static&const&int&kL0_StopWritesTrigger&=&12;RocksDB这几个数字都可以通过参数设置, 相对来说好一些:options.level0_slowdown_writes_trigger
options.level0_stop_writes_trigger但是一旦写入速度&compaction速度, 不论这几个阈值设置多大, L0都迟早会满的.阈值调大会导致数据都堆积在L0, 而L0的每个文件key范围是重叠的, 意味着一次查询要到L0的每个文件中都查一下, 如果L0文件有100个的话,这大约就是100次IO, 读性能会急剧降低.实际上, RocksDB的&Universal Style&就是把所有的数据都放在L0, 不再做compaction, 这样显然没有写放大了,但是读的速度就更慢了, 所以限制单个DB大小小于100G, 而且最好在内存.基准数据100G的情况下, 50K的value, 用200qps写入, 磁盘带宽达到100MB/s 以上.真实写入数据大约只有50K*200=10MB/s, 但是磁盘上看到的写大约是10-20倍, 这些写都是compaction在写,此时的性能瓶颈已经不是CPU或者是LevelDB代码层,而是磁盘带宽了, 所以这个性能很难提上去,而且HDD和SSD在顺序写上性能差别不大, 所以换SSD后性能依然很差.其它同学发现的issue:&提到的case, 12MB/s的写入, 磁盘IO大约100MB/s&发现100G基础数据时, 写1K的value性能也比较差.Hbase也有这个问题&: Compaction操作就是读取小的HFile到内存merge-sorting成大的HFile然后输出,加速HBase读操作。Compaction操作导致写被放大17倍以上,不过HBase社区很少关注这个问题.猜测原因可能是HBase是一种批处理思路, 数据都是批量写入进去, 写进去后再一次性做一个Compaction.这几个问题只针对LevelDB, RocksDB已经解决了:如果写入200G数据, 在db目录下就会有20w个文件, 需要频繁打开/关闭文件, 一个目录里面20w个文件的性能会很差(当然btrfs之类好些)对于50K的value, 一个文件只能放40个key-value对, 效率很低每个mmtable太小(2M), 存在如下问题:对于大value来说, 一个写请求, leveldb会写2份, write-ahead-log和真实数据, 浪费.Write Ahead Log 不能禁掉.不能自定义compaction函数, 如果可以自定义, 则可以在compaction的时候做ttl功能.compaction不能限速.读触发compaction (allowed_seeks), 在某些场景不合适.leveldb 适用于小的kv库(value小(&1K), 总size小(&100G)), 比如chrome客户端 或者小的cache(比如某些模块自带的cache)由于LevelDB把key和value都放在同一个文件里面, compaction的时候必须key和value一起读写, 所以写放大显得更为明显. 其实我们只需要保证key有序, compaction只需对key做就行了,key和value分开来存放也许一个不错的优化思路.在程序里面, 可以把leveldb/rocksdb当做一个 自动扩容, 持久化 的hash表来用.转载:
了这篇文章
类别:┆阅读(0)┆评论(0)[数据库]Rocksdb引擎记录格式
你的位置:
[数据库]Rocksdb引擎记录格式
& & &Rocksdb是一个kv引擎,由facebook团队基于levelDB改进而来,Rocksdb采用LSM-tree存储数据,良好的读写特性以及压缩特性使得其非常受欢迎。此外,Rocksdb引擎作为插件已经集成在facebook维护的MySQL分支,用户可以通过SQL来访问rocksDB。本文主要通过分析Rocksdb引擎的记录格式,并通过对比innodb,来让大家了解Rocksdb。Rocksdb作为一个kv引擎,用户通过put(key,value)来写入key,或者通过get(key)接口来获取value,对rocksdb本身而言,每条记录都是一个key-value。当Rocksdb作为一个存储引擎接入到MySQL时,key-value结构如何存储表中各个索引,以及如何记录中各个列的信息是本文要具体讨论的。rocksdb引擎与innodb引擎类似,也是采用索引组织表,无论是表(主键索引)还是二级索引都是以LSM tree方式组织,rocksdb记录主要包括三部分,key,value和meta三部分内容,具体见下表,然后我通过介绍一条具体记录在rocksdb引擎中的存储格式来说明问题。rocksdb基本记录存储格式key_sizekeyvalue_sizevaluePK/SecKeyColumns dataSeqenceId,flag&create table row_format( id int not null, c1 int, c2 char(10) not null, c3 char(10), c4 varchar(10), c5 varchar(10) not null, c6 blob, c7 binary(10) not null, c8 varbinary(10)) engine=insert into row_format(id,c2,c4,c5,c7) values(1,'abc','abc','efg','111')&key部分:Index_idkey4bytes8bytes0x7fdfax00&&&&0x00&&& 0x01&&& 0x7b&&&&0x00&&& 0x00&&& 0x00&&& 0x000x7fdfax00&&&&0x00&&& 0x00&&& 0x05Index_id:索引的编号,全局唯一。rowid:由于表没有主键,系统会产生一个bigint类型的rowid作为主键,占用8个字节,而innodb引擎的rowid占6个字节,需要注意的是rowid存储采用的大端的存储(高位存储低字节),这里主要是为了memcompare。Value部分:&Null-flagIDC1C2C3C4C5C6C7C8Length1B4B----30B----4B4B----10B----Value&1&abc0x20&&len+valuelen+value&1110x00&&0x7fdfax1b&&&&0x01&&& 0x00&&& 0x00&&& 0x00&&&&0x61&&& 0x62&&& 0x630x7fdfax20&&& 0x20&&& 0x20&&& 0x20&&& 0x20&&& 0x20&&& 0x20&&& 0x200x7fdfax20&&& 0x20&&& 0x20&&& 0x20&&& 0x20&&& 0x20&&& 0x20&&& 0x200x7fdfax20&&& 0x20&&& 0x20&&& 0x20&&& 0x20&&& 0x20&&& 0x20&&& 0x200x7fdfax20&&& 0x20&&& 0x20&&&&0x03&&& 0x61&&& 0x62&&& 0x63&&&&0x030x7fdfax65&&& 0x66&&& 0x67&&&&0x31&&& 0x31&&& 0x31&&& 0x00&&& 0x000x7fdfax00&&& 0x00&&& 0x00&&& 0x00&&& 0x00说明:Value的最前面部分(0x1b)就是存放记录的null信息。根据记录中可以为null字段的个数,确认需要占用的字节数,如果小于8个,则只需要一个字节。例子中,c1,c3,c4,c6,c8均可以为null,因此需要5个bit,所以用1个byte表示Null-flag即可,由于插入记录中,c4不为null,则对应的bit为0,也就是0x。对于null,无论是定长还是非定长数据类型,都不占用真实的存储空间,只需要一个bit位来表示为null即可。空串&&与null,上面提到了null需要占一个标记位,而对于&&,如果是变长字段仍然需要存储长度信息,对于定长字段,则会补全。对于变长字段,比如varchar,0x03 0x61 0x62 0x63数据有len+data组成,如果数据长度小于256,len只需要占用一个byte;如果len大于255,且小于65536,则需要占用2个字节,对于longblob类型,则需要占4个字节。对于定长字段,不需要存长度信息直接存储data,如果不足则补充。补充字符有点诧异,对于char类型,补充0x20,对于binary类型,补充0x00。对于lob类型,比如tinyblob,blob,mediumblob,longblob,以及对应的text类型,处理策略与varchar类似,存储长度的字节数根据数据类型的范围确定,比如blob长度占用2个字节,而longblob的长度占4个字节。所以在rocksdb里面,没有innodb中所谓&溢出页&的概念。对于innodb引擎,如果blob字段内容超过768字节,多余的data存储在溢出页,页内通过20个字节指向溢出页,主要包括第一个blob页的space_id,page_no和起始偏移,如果存在多个blob页,则页与页之间通过类似的方式进行关联。具体可以参考btr0cur.h文件中关于BTR_EXTERN_xxx相关的宏定义,以及接口btr_copy_externally_stored_field_prefix_low。有关value部分的存储实现可以参考rocksdb引擎接口convert_record_to_storage_format,convert_record_from_storage_format和innodb引擎接口row_mysql_store_col_in_innobase_format,row_sel_field_store_in_mysql_format。Meta部分:Meta部分主要是SequenceID,这个SequenceID在事务提交时产生,主要用于rocksDB实现MVCC,用于可见性判断,此外Meta中还包含flag信息,由于标示记录类型,put,delete,singleDelete等,具体而言Sequence占7个字节,flag占1个字节。rocksdb索引格式& & & Rocksdb中,所有的数据都是通过索引来组织,与Innodb类似,也是索引组织表,每个索引有一个全局唯一的index_id。索引主要包括两类:主键索引和二级索引,前面介绍的记录格式,也就是主键索引的格式,包括key,value和meta三部分。二级索引也包含key,value和meta三部分,但是value中不包含任何数据,只是包含checksum信息。主键索引keyValueMetaIndex_idPKNULL标记位列数据Checksum(可选)SeqId,flag二级索引keyValueMetaIndex_idSecondaryKeyPKChecksum(可选)SeqId,flag对比innodb引擎(innodb_file_format=Barracuda,row_format=compact)innodb记录格式变长字段长度列表NULL标记位record_headerTrxidRoll_ptr列数据create table row_format( id int not null, c1 int, c2 char(10) not null, c3 char(10), c4 varchar(10), c5 varchar(10) not null, c6 blob, c7 binary(10) not null, c8 varbinary(10)) engine=insert into row_format(id,c2,c4,c5,c7) values(1,'1234','ab','efg','111');记录内容:& 00 00&03 02 0a&1b&00 00& 18 ff b5&00 00 00 00 28& |...............(|&&00&00 00 00 01 01 03&83& 00 00 01 36 01 10&80 00& |...........6....|&&00 01 31 32 33 34 20 20& 20 20 20 20 61 62 65 66& |..1234&&&&& abef|&&67 31 31 31 00 00 00 00& 00 00 00&00 00 00 00 00& |g111............|说明:& & &1. &&03 02 0a,这里存的是长度信息,所有非null的变长列信息都逆序存在一起,这里按先后顺序是c5,c4,c2,这里innodb将char(10)也当作变长字段处理了。& & &2. &1b存储的是null信息,与rocksdb对null处理一致。00 00& 18 ff b5存储的是record-header。& & &3.&00 00 00 00 28&00&00 00 00 01 01 03&83& 00 00 01 36 01 10, 这三部分别是rowid,trxid和roll_ptr,分别占6个字节,6个字节和7个字节。& & &4. 最后一部分是数据,null不占任何存储空间,与rocksdb处理类似。区别在于对于char类型的处理,innodb将字段c2类型char(10)补齐到10个字节,存储为31 32 33 34 20 20 20 20 20 20,将其作为varchar处理,记录了长度信息;而Rocksdb则是补齐到30个字节(utf8字符集),作为char处理,不记录长度信息。& & & 整体而言,innodb记录格式包含了record_header(记录头信息),占5个字节,主要包括记录号(heap_no),列数目,下一条记录的位置以及是否删除等信息。rocksdb则相对简单,只有整体的value-size,以及通过Meta中flag标示记录的状态put 或者是delete。innodb将变长列长度信息集中存放在一起,使得查找任意列的代价都差不多,而rocksdb的变长列信息则是放在每列的前面,访问最后一列需要逐一计算前面的列,才能定位。此外,由于innodb引擎与rocksdb引擎由于实现MVCC的机制不同,导致innodb引擎和rocksdb引擎需要存储的额外信息也不同。Innodb实现MVCC依赖于回滚段信息,记录需要额外存储trxid和roll_ptr两个字段,分别是6个字节和7个字节(type,rsegid,pageNO,offset),其中type占一个bit位,标示insert 或者是update类型,rsegid回滚段id占7bit位,pageNo占4个字节,页内偏移占2个字节。Rocksdb实现MVCC则是依赖于SequenceID,通过SequenceID来判断记录的可见性,SequenceID占7个字节。& & &&细节上来说,RocksDB引擎和innodb引擎在处理null,char和varchar的方式类似,但innodb对于char类型做了优化,统一作为varchar处理。另外rocksdb引擎没有对blob做特殊处理。你可能会有疑问,rocksdb不是也有block_size吗,如果设置为16k,blob数据超过16k怎么办?对于innodb而言,由于表实质是以一个个page通过B-tree组织起来的,每个page是固定大小,当记录非常大时,就需要借助溢出页,通过链接的方式关联起来。而rocksdb中block_size只是一个压缩单位,并没有严格约束,文件内容以block组织,由于文件中block可能是压缩过的,因此每个block的大小不固定,通过偏移来定位具体某个block的位置。如果遇到大的blob数据,则可能这个block比较大,记录所有数据存储在一起,不会跨block。& & & 对于索引长度限制也有所不同,对于innodb引擎来说,索引中单列长度不能超过767个字节,而rocksdb引擎单列长度不超过2048个字节,具体可以参考max_supported_key_part_length各自的实现;整个索引的长度,rocksdb和innodb都限制在3072个字节,实际上是server层的限制,因为它们的各自限制的长度都比server层的大。具体可以参考各自max_supported_key_length的实现。参考文档/doc/refman/5.7/en/innodb-physical-record.html/?p=127/zhoujinyi/articles/2726462.html&
、 、 、 、 、Dhruba Borthakur, software engineer at Facebook, presents RocksDB, a new open-source embedded database that's meant to take advantage of all the/watch?v=V_C-T5S-w8gIgor Canadi + Mark Callaghan (Facebook) More Info: The Databaseology Lectures (Fall 2015) Carnegie Mellon University/watch?v=jGCv4r8CJEIThis video presents an introduction of RocksDB and helps us understand the basic data structures used in/watch?v=hHsxqkcZy7cAnkit Gupta and Naveen Somasundaram present how RocksDB is used in FollowFeed is the backend system which powers all feed applications in/watch?v=plqVp_OnSzg/watch?v=tMeon8FHF3I /watch?v=MtFEVEs_2VoFeaturing: Igor Chanadi, Database Engineer at F and Yin Wang, Research Scientist at Facebook Description: RocksDB is an embeddable key-value/watch?v=T1jWsDMONM8The RocksDB team give a quick overview to where the project has come from, where it currently stands, and some of the exciting ideas we're working/watch?v=NJ6QgMH2KPU/watch?v=ASQ6XMtogMsSpeakers: Dhruba Borthakur, Facebook: Open Discussion on RocksDB Roadmap and Vision Use cases of RocksDB: Sage Weil: Ceph + RocksDB Igor Canadi,/watch?v=g2PglBY_18w/watch?v=pFcb6ajSA_EReed Allman talks about how set out to use LevelDB and ended up using Let's walk through a naive queue implementation that would have/watch?v=HTjt6oj-RL4/watch?v=PSCa9_Avne0Speaker: Siying Dong (Facebook) XLDB-2015 website: Copyright 2015 Stanford University This work is licensed under a Creative Commons/watch?v=Wbq6E71l97AVideo by: In this talk we'll go over various scenarios of how to use RocksDB which is an embeddable persistent key-value store for fast/watch?v=PvhNkc5-u3YAdvertising AdvertisingRelated searches
Our servicesWe supportOur toolsNeed help ?This website uses cookies to ensure you get the best experience on our website. Findeen - Copyright (C) 2013Leveldb/Rocksdb/Accumulo简单比较 - 简书
<div class="fixed-btn note-fixed-download" data-toggle="popover" data-placement="left" data-html="true" data-trigger="hover" data-content=''>
写了892字,被0人关注,获得了0个喜欢
Leveldb/Rocksdb/Accumulo简单比较
Leveldb是一个google实现的非常高效的kv数据库,目前的版本1.2能够支持billion级别的数据量了。 在这个数量级别下还有着非常高的性能,主要归功于它的良好的设计。特别是LMS算法,但是Leveldb是单进程的服务,而且它只是一个 C/C++ 编程语言的库, 不包含网络服务封装, 所以无法像一般意义的存储服务器(如 MySQL)那样, 用客户端来连接它. LevelDB 自己也声明, 使用者应该封装自己的网络服务器.所以它只能做一个嵌入式数据来使用,目前淘宝的Tair系统将它做了封装。Rocksdb其实是Leveldb的改进版,RocksDB支持一次获取多个K-V,还支持Key范围查找。LevelDB只能获取单个Key,RocksDB除了简单的Put、Delete操作,还提供了一个Merge操作,说是为了对多个Put操作进行合并。站在引擎实现者的角度来看,相比其带来的价值,其实现的成本要昂贵很多。下面是性能对比
Accumulo是一个使用谷歌BigTable的设计思路,基于Hadoop、Zookeeper和Thrift构建的,可靠的、可伸缩的、高性能的排序分布式KV数据存储系统。这个开源项目是由美国国家安全局开发,并于2011年发布的。目前,Accumulo属于Apache的顶级项目,它具有BigTable中所没有的一些功能,例如基于单元的访问控制。下面我们看看Accumulo都有哪些主要特性:1、对数据保护的安全性高从下图可以清楚的看到Accumulo是如何控制单元的访问控制的。
2、支持ACID原则3、读写性能强麻省理工2013的性能测试报告MIT Lincoln laboratories has recently released performance data for Apache Accumulo.In this paper MIT reached ~400,000 writes per second per node across an 8 node cluster.This is impressive performance given that MIT cites HBase as supporting ~60,000 writes per second per node and Cassandra as supporting ~35,000 writes per second per node.在8节点集群的每个节点上,accumulo每秒达到40万次的写入,hbase达到6万次的写入,Cassandra达到3.5万次的写入。
为什么会写入这么快呢?原因如下:因为accumulo使用了动态分布式空间数据模型(The Dynamic Distributed Dimensional Data Model (D4M)),Accumulo没有直接使用Hadoop的MapReduce并行编程模型,而是使用了pMatlab的并行编程环境。4、分布式Accumulo采用分布式存储。当Accumulo表不断的变大时,表会被自动分成块,数据可以存储在不同的块中。5、分区当表的容量达到上限时,accumulo会自动将表进行分割成默认的大小。Accumulo的使用场景目前,Accumulo都用在了政府的应用中,除政府之外的企业用的比较少。Cloudera公司已经将Accumulo 1.6.0的版本加入到了中。此外,Hadoop系统打算用Accumulo解决储存海量数据的可扩展性。最后通过各维度的比较,三个数据库的对比为
参考的相关链接
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
选择支付方式:}

我要回帖

更多关于 rocksdb 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信