Facebook是怎么做到每秒索引数百万条记录的?

首页 > 打怪经验 来源: 0 0
编者案:作者Pedro Eugnio Rocha 隐任Facebook体系工程师,2016年结业于巴西巴拉那州联邦大学消息学业余,研讨乐趣包罗数据库与存储体系,特别是与散布式体系战大数据有关的数据库与存储体系。作...

  编者案:作者Pedro Eugnio Rocha 隐任Facebook体系工程师,2016年结业于巴西巴拉那州联邦大学消息学业余,研讨乐趣包罗数据库与存储体系,特别是与散布式体系战大数据有关的数据库与存储体系。作者正在文章中引见了Cubrick:一种内存数据经管体系。Cubrick是由Facebook开拓的新型散布式内存数据库经管体系,其目标正在于处理少量数据资本并交运转所存正在的成绩。为到达交互式阐明高度静态数据集这一目标,Cubrick使用一种用于经管柱形内存数据的新战略,这类战略答应正在数据集的每一个维度中停止索引过滤,并有用地及时更新。

  大数据集及时阐明已成为浩繁互联网公司的普遍需要。最大限造减少数据天生与数据阐明之间的时间差使患上数据驱动的互联网公司可以或者许真时构成看法,作出决议计划,终究可以或者许增进本身倏地成幼。为了真理想时阐明,需求筑立一个数据库体系,该体系可以或者许接二连三地获患上由收集日记天生的数据流,正在数据天生几秒后应对于查询需要。鉴于有一些及时数据流每一秒钟可以或者许出几百万笔记录,大规模获患上这些高静态化数据集将面对于愈来愈多的应战。

  另外,一切的数据库查询需求正在数百毫秒内实现,为用户供给一种真正在的交互式体验,以便充真开掘数据的操纵价值,可是,隐真上,正在如斯短的时间内阅读大型数据集请求少量并交运转,因此复杂的数据资本成为必需的硬件前提。可是,正在Facebook曩昔几年的事情中,咱们调查过一些适用案例,正在这些案例中一切的查询都经由过渡过滤,另外,咱们只关心一种超大型数据集合的小部门特定子集。比方,一项查询能够只对于某一特定生齿统计学中的一种怀抱方式感乐趣,比方,限造于住正在美国的人群,或者来自某一特定性此外人群,测定会话量,查询某一特定集体,或者说起某一特定标签。斟酌到使用哪些过滤前提与决于数据阐明师对于数据集合哪些部门感乐趣,这种过滤前提多为点对于点形式,使患上保守的一维预界说的索引变患上不那末有用。

  Cubrick是由Facebook开拓的新型散布式内存数据库经管体系,其目标正在于处理少量数据资本并交运转所存正在的成绩。为了交互式阐明高度静态数据集,Cubrick使用一种用于经管柱形内存数据的新战略,这类战略答应正在数据集的每一个维度中停止索引过滤,并有用地及时更新。这类数据经管战略与一种非凡式且经由优化的查询引擎相连系使患上Cubrick成为唯逐个种适宜交互式及时阐明的数据经管体系,而且使患上Cubrick到达今朝数据库处理方案还没有完成的数据经管规模。

  经由过程跳过非需要数据来普及过滤机能的保守数据库手艺要末是基于索引(辅助数据布局),要末是基于对于数据集停止预清算。经由过程辅助索引(如B+Trees)来普及获患上特定记真的效力是一种为大大都数据经管体系使用的家喻户晓的手艺,且几近每一种OLTP数据经管体系均使用这类数据库手艺。可是,正在OLAP负载中,更新索引的对于数开支因为被视为表的巨细战获患上数据速度的怀抱而被。正在存储踪迹中,大大都类型的索引(有名的是二级索引)经由过程增大所占有的存储空间来存储中等结点战数据值,以便于正在每一栏成立索引能够会以致存储利用率成倍增加。另外,若何精确地肯定索引栏是点对于点查询面对于的一项应战。

  正在查询时间内有用跳过数据的另外一路子是预清算数据集。基于C-STROE架组成立的以栏为导向的数据库可以或者许依照环节字排序的数据集的多种复造版本——也被称为映照——也可以或者许被用于有用评价依照环节字排序的每一栏中的过滤器机能。虽然一种与LSM-Tree(日记布局的兼并树)类似的布局被用于摊还拔出所带来的计较利润,跟着所获患上数据的规模不竭扩张,依然需求少量的数据重组来映照成果的及时更新。另外, 咱们患上事后决议要筑立哪些映照机械绝对于应的排序环节字,这些正在由点对于点查询组成的数据集合难以界说。最初,因为每一次新的映照都是对于全部数据集的复造,这类体例分歧用于数据经管体系的内存设置,这类数据经管体系试图正在其内存中拟合尽能够多的数据集,以免对于硬盘停止沉重拜候。

  咱们已采与一种新方式而非经由过程预清算数据集或者二级索引数据布局这两种方式,来处理若何跳过非需要数据以普及过滤器机能这一成绩。假设体系中一切的表格都是被每一维度列停止分区摆列的,咱们对于保守的数据库分区观点停止扩大。同时,可以或者许事后获患上每一维度列的基数,这答应咱们将数据集理解为一个有更小的超立方体组成的大立方体,正在必然水平上更像一个n维魔方。每一个较小的超立方体(或者brick,Cubrick的一种术语抒发法)代表基数函数分派的一个标识符,以一种无序且附注的方式正在每一列中零星地存储数据。最初,咱们假设,一切的字符串值都是经由代码编码的,外部是由枯燥递减的整数暗示的。该假定便于咱们开拓一种仅正在原始数据层面运转的经由优化的,邃密的数据库引擎。

  与其余数据库体系类似,Cubrick的每一列均以一种怀抱或者一种维度停止界说,这些维度凡是被用于过滤战分组,每一种怀抱被用于聚合函数中。图1阐释了:正在一个由两个维度——区间战性别,基数为4,转变尺寸为2战1,与两种怀抱——爱好战评论,组成的一个数据集例子中,若何为每一模块分派数据记真。

  鉴于有一种持续性的时间函数将每一笔记录映照到与之相婚配的方针模块中,并且每一模块中的数据都是无序摆列的,这类复杂却有用的数据经管方式斟酌到很是有用的记真拔出。另外,若是正在搜刮空间内没有拔出记真,正在查询时间段内,每一模块均可以或者许紧张地与查询过滤器相婚配,并获患上梳理。

  为了评价Cubrick获患上记真的速度与获患上记真通道所占用的CPU,图8所示为:与CPU占用量比拟,每一一个繁多结点簇每一秒获患上的记真数目。本尝试患上出下列论断:即便每一秒获患上的记真数目到达100万,每一一个繁多结点簇所占用的CPU仍然处于低程度(20%下列)。

  图7所示为正在一个72个结点簇处运转的10TB数据集存正在的多种潜正在查询,旨正在评价咱们的索引战略是不是有用。X轴代表使用过滤器的列,色彩标尺为这类过滤器的局限性,或者该数据集与过滤器之间的婚配百分比。尝试成果显隐,Y轴上的色彩与存正在较着联系关系性,与X轴上的不有关。换句话来说,非论处于哪一列,当使用过滤器时,查询速度将获患上很大水平的提拔。

  注:正在一个72个结点簇处运转的10TB数据集经分歧维渡过滤后存正在的多种潜正在查询

  请参考咱们正在2016年国内数据库集会上揭晓的论文,与患上完全的尝试方式与成果。

  正在曩昔几年内,Facebbook曾正在多个及时(批量)交互式阐明使用真例中采与Cubrick,Cubrick正正在疾速生幼为一个更加幼稚的全功用数据经管体系。关于若何愈加有用地处置拥有分歧数据散布特点的数据集与使这类立方体图式更具静态化,咱们还要停止少量的研讨求证。咱们信任,Cubrick的研发是咱们朝向这一方针迈进的第一步,不外,今朝该研讨范畴还存正在几个还没有摸索且风趣的主题期待咱们展开研讨。


声明:本文章来源于网络,如果存在出处、来源错误,或内容侵权、失实问题,请及时与我们联系。本文仅代表原媒体及作者观点,不代表最新电信传奇私服立场!