雅虎开源可以提升流操作速度的DataSketches

简介:

就像在Venture Beat上所宣布的那样,雅虎开源了DataSketches,这是一个用Java编写的随机流算法库。DataSketches允许进行通常来说开销很大的操作,像计算变量不同的值在流中出现的次数,而且消耗的时间少,占用的内存小,误差可预测。

正如他们在技术博客上所作的说明,雅虎内部已经使用DataSketches来提升多个产品的性能,包括Flurry。Sketch是DataSketches的一个基本概念,这是一个流的“汇总(summary)”,其中每次更新都按同样方式处理,而不考虑历史更新。这个概念是DataSketches性能的核心,因为传统的流处理需要保存一个随着时间增长的历史。例如,如果要计算每个唯一值出现的次数,就需要保存每个新出现的唯一值,这样,对于后来的唯一值,检查时间将会增加;因此,每次更新都会以一种不同的、开销更大的方式处理。另一方面,sketch的构造方式使它只能保存固定数量的、需要保存的信息,也就是说,所有的更新都以完全相同的方式执行。

如果仔细研究下DataSketches背后的科学原理,那么我们就会发现,它以整合了KMV和自适应采样算法的Theta-Sketch框架为基础。感兴趣的读者可以读下这篇论文,它提供了该框架的形式化描述和特性说明,但在这里,我们将提供一种简化的、更为直观的描述。

就让我们将这个问题置于实时计算一个网站的独立访客的场景下。计算一个流中不同的变量值出现的次数,主要的问题是需要为每个已知的、不同的变量值存储一个副本。除此之外,变量的每个新实例(例如,每次新访问网站)都需要对照已知的、不同的变量值所组成的列表进行检查,看看这是一个新访客,还是一个已有的访客。这就是说,假如独立访客的数量为N,则系统需要的内存为O(N),每次网站访问需要花费长为O(log N)的时间来检查是否是一个独立访客。

KMV(第k个最小值)算法的策略是以存储更少的值(k个值)为基础,从中可以估计出N的大小,而且误差范围固定。要存储的值使用哈希函数计算得出,该函数将要测量的变量(在这个例子中是指对页面的独立访问)映射成0到1之间的一个值;实际上,这个哈希函数是什么并不重要,只要结果可以均匀地分布在0到1之间就可以。每次测量变量的一个新实例,我们就计算它的哈希值,并查看我们是否已经存储了该哈希值,如果没有,就存储它。实际上,主要的不同点是,在任何时刻,只有k个最小的值会被保存:如果有一个新值加入到组中,那么第k+1个值会被移除,保证内存占用一直为O(k),时间成本一直为O(log k)。这样,不同值出现的次数就可以估计为(k-1)/KMV,其中,KMV为第k个最小值,或者是组中存储的、幸存下来的、最大的哈希值。

从检查结果表达式很容易推断出,如果我们比较两个流的数据,一个流中出现不同值的次数多于另一个,那么出现更多不同值的流会产生更多的哈希值,因此,存储的第k个哈希值将会比另一个流的第k个哈希值小。在k相同的情况下,第k个哈希值越小,上述表达式计算得出的值越大。由此可以得出结论,该表达式至少是与出现不同值的实际数量成正比的。

有多篇研究论文已经证明了,上文从形式上阐述的表达式是一个很好的估计,不过,一个简单的试验就可以提供描述性的证据。假设一个数据流出现199个不同的值,而且我们在算法中让k=20。如果一个哈希函数将结果均衡分布在0到1之间,那出现的199个不同的值大体上将映射为0.005、0.01、0.015等等,直到0.995。如果我们只保存20个最小的值,那么第20个值将是0.1,将这个值带入上述表达式,结果是(20-1)/0.1=190。

除了性能外,DataSketches还有其他特性,例如,它能够组合已经分别计算好的sketch,并得到一个综合结果,而不需要要检查底层数据。这使用户可以计算单个组的数据或者数据分区,然后根据需要组合它们。Maven Central中提供了DataSketches库,以及用于Hadoop Pig、Hadoop Hive和Druid的适配器。

查看英文原文:Yahoo Open-Sources DataSketches for Faster Operations Over Streams

本文转自d1net(转载)

相关文章
|
2月前
|
Web App开发 缓存 前端开发
哇塞!Chrome 浏览器竟有四大神秘进程,带你探秘互联网世界的强大引擎!
【8月更文挑战第31天】Chrome浏览器因其快速稳定的表现深受用户喜爱,其背后是四大独特多进程架构的支持:浏览器主进程管理界面与进程协调;网络进程处理网络请求及缓存;渲染进程将网页内容转化为可视化页面;插件进程则确保各类插件如Flash Player的安全稳定运行。通过这些进程间的高效协作,Chrome实现了流畅、稳定的上网体验。例如,在访问新闻网站时,各进程协同工作,确保网页内容顺利加载和显示。理解这些进程有助于提升使用体验并有效解决问题。
48 0
|
Java Unix Linux
开源项目推荐:IM开源即时通讯软件收集,请重点关注Telegram/野火/flamingo
开源项目推荐:IM开源即时通讯软件收集,请重点关注Telegram/野火/flamingo
3909 0
|
存储 分布式计算 资源调度
膜拜!华为内部都在强推的783页大数据处理系统:Hadoop源代码pdf
大数据处理系统:Hadoop源代码情景分析,采用的是Hadoop2.6。如果你有点野心,想对大数据处理系统有比较深入透彻的了解,特别是想有朝一日自己也设计一个这样的系统,甚至自己把它写出来,那么你真应该认真读一下这本文,以及 Hadoop的源代码,看看人家是怎么设计怎么实现的。
|
Web App开发 安全 架构师
网易云信开源会议和低延时直播两大项目:对开发者完全开放、支持修改后商用
“我始终相信开源会产生裂变。当越来越多的开发者参与到开源项目中,这套代码、组件就不仅仅只是一套代码,它会变成我们未来的生产力和竞争力。”网易智企低延时直播开源负责人、网易云信流媒体首席架构师吴桐说道。
230 0
网易云信开源会议和低延时直播两大项目:对开发者完全开放、支持修改后商用
|
存储 Rust Kubernetes
微软开源主管 Sarah:2021 年四大开源注意事项
微软开源主管 Sarah:2021 年四大开源注意事项
|
存储 监控 测试技术
深入 Facebook 消息应用服务器,互联网营销
  要点: Facebook 统一消息系统(邮件、短信、聊天、消息等); 用 HBase 作为后端存储设施,每个用户数据存储在 HBase 的单独一行里,每个实体(文件夹、主题、消息等等)都存储在自己的HBase列中; 涉及 HayStack 图片处理基础设施; 使用 Apache Lucene 维护反向索引列表; 镜像了大约 10% 用户的实时聊天和收件箱中的信息到测试集群中,并通过 dark launch 进行测试。
1443 0
|
jstorm Java Apache
Apache基金会接受阿里开源JStorm捐赠
本文讲的是Apache基金会接受阿里开源JStorm捐赠【IT168 云计算】11月19日,阿里巴巴集团宣布正式加入Apache基金会,并向Apache基金会捐赠开源项目JStorm。JStorm正式成为Apache Storm里的子项目。
1834 0
|
消息中间件 关系型数据库 Kafka