NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

  • 2016-01-24
  • 本文字数:1609 字

    阅读完需:约 5 分钟

就像在 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

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2016-01-24 18:003979
用户头像

发布了 1008 篇内容, 共 374.6 次阅读, 收获喜欢 341 次。

关注

评论

发布
暂无评论
发现更多内容

微店商品详情数据接口(micro.item_get)丨微店API接口

tbapi

微店API接口 微店商品详情API接口 微店商品数据接口

Meta推出大模型开源项目Llama 2

百度开发者中心

人工智能 大模型 LLM

Scrapy框架之Docker安装MongoDB教程。

百度搜索:蓝易云

mongodb Docker Linux Scrapy 云服务器

手把手入门 MO | 如何使用 DolphinScheduler 连接 MatrixOne

MatrixOrigin

分布式数据库 云原生数据库 MatrixOrigin MatrixOne 超融合数据库

智能连接,助力餐饮品牌实现商城订单自动同步

聚道云软件连接器

案例分享

PHP服务器监控与维护:确保长期稳定运行的方法

一只扑棱蛾子

服务器 PHP服务器

iOS应用如何签名?使用xcode签名的办法和工具 附xcode14下载安装包

南屿

Xcode Mac版 应用签名 Xcode签名

Allins 官网正式上线,铭文赛道进入 AMM 交易时代

大瞿科技

Git将单个文件合并到指定分支教程。

百度搜索:蓝易云

git 云计算 Linux 运维 云服务器

我们一起聊聊MySQL 索引的底层逻辑

这我可不懂

MySQL 数据库

MatrixOne 完成与飞腾处理器的兼容互认

MatrixOrigin

分布式数据库 云原生数据库 MatrixOrigin MatrixOne 超融合数据库

每日一题:LeetCode-695. 岛屿的最大面积

半亩房顶

Go 面试 算法 矩阵 LeetCode

科兴未来|中国北京 · HICOOL 2024全球创业大赛招募启动

科兴未来News

软件开发

Geek_8da502

【第七在线】时尚鞋服企业商品运营如何实现智能化?

第七在线

CopyQueue for mac(管理文件传输工具) v3.1永久激活版

mac

苹果mac Windows软件 CopyQueue 管理文件传输工具

解读 | Mint Blockchain 为何选择 OP Stack 作为 L2 技术方案?

NFT Research

blockchain NFT\ Layer 2

通过智能钱包监控降低加密交易费用

Footprint Analytics

区块链 加密货币

让数据同步纵享丝滑,ETLCloud安装指南

RestCloud

ETL

macOS 14 Sonoma(最新MacOS系统) pkg完整安装包 14.2正式版

南屿

苹果系统下载 macOS 14 Sonoma

小程序如何实现视频通话及互动直播功能?

Geek_2305a8

自有APP内怎么实现小程序连麦直播

Geek_2305a8

引领功能型对话大模型的部署实践革新

百度开发者中心

人工智能 nlp ChatGPT

利用虚拟线程重写自定义异步功能

FunTester

一文读懂Kubernetes部署策略

高端章鱼哥

Kubernetes 部署

云组态是什么?云组态软件特点及应用

2D3D前端可视化开发

物联网 可视化 组态软件 工业自动化 云组态

软件测试/测试开发丨从原理到实战,四天带你轻松进阶Python

测试人

软件测试

软件测试/测试开发丨软件测试基础概念 学习笔记

测试人

软件测试 测试开发

MO 2023 年度回顾

MatrixOrigin

分布式数据库 云原生数据库 MatrixOrigin MatrixOne 超融合数据库

Office LTSC 2021 for mac中文破解版下载

影影绰绰一往直前

MatrixOne 1.1.0 Release

MatrixOrigin

分布式数据库 云原生数据库 MatrixOrigin MatrixOne 超融合数据库

雅虎开源可以提升流操作速度的DataSketches_Java_Abraham Marín Pérez_InfoQ精选文章