生成式AI领域的最新成果都在这里!抢 QCon 展区门票 了解详情
写点什么

雅虎开源可以提升流操作速度的 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

公众号推荐:

2024 年 1 月,InfoQ 研究中心重磅发布《大语言模型综合能力测评报告 2024》,揭示了 10 个大模型在语义理解、文学创作、知识问答等领域的卓越表现。ChatGPT-4、文心一言等领先模型在编程、逻辑推理等方面展现出惊人的进步,预示着大模型将在 2024 年迎来更广泛的应用和创新。关注公众号「AI 前线」,回复「大模型报告」免费获取电子版研究报告。

AI 前线公众号
2016-01-24 18:003964
用户头像

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

关注

评论

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

华为云API对话机器人CBS的魅力—实现简单的对话操作

华为云PaaS服务小智

ide 云计算 软件开发 API 华为云

【FAQ】HMS Core推送服务推送角标的开发及常见问题解答

HMS Core

HMS Core

开发指导—利用组件&插值器动画实现HarmonyOS动效

HarmonyOS开发者

HarmonyOS

iOS APP版本更新升级教程:如何打包上架新的APP版本?

雪奈椰子

Spring Bean 别名处理原理分析

江南一点雨

Java spring

【创新项目探索】大数据服务omnidata-hive-connector介绍

openEuler

大数据 hive Linux 开源 操作系统

高并发系统设计之限流

Java随想录

Java 架构

从积木式到装配式云原生安全 | 京东云技术团队

京东科技开发者

云原生 云原生安全 企业号9月PK榜

深入剖析计算机网络和操作系统:面试必备知识解析

王中阳Go

面试 面试题 计算机网络 操作系统 八股文

文盘Rust -- 生命周期问题引发的 static hashmap 锁 | 京东云技术团队

京东科技开发者

rust 生命周期 cli 企业号9月PK榜

BSC链上BNB代币LP质押挖矿分红系统开发【源码实例】

V\TG【ch3nguang】

挖矿矿池系统开发案例

[PaddleGAN]人脸表情迁移-视频换脸

alexgaoyh

飞浆 PaddleGAN 视频编辑 换脸 First Order Motion

软件测试/测试开发丨Web自动化 测试用例流程设计

测试人

程序员 软件测试 测试开发 测试用例

2023-09-05:请用go语言编写。一个图像有n个像素点,存储在一个长度为n的数组arr里, 每个像素点的取值范围[0,s]的整数, 请你给图像每个像素点值加上一个整数k(可以是负数), 像素值会

福大大架构师每日一题

福大大架构师每日一题

iOS APP版本更新升级教程:如何打包上架新的APP版本?

软件测试/测试开发丨Web自动化测试 cookie复用

测试人

Python 程序员 软件测试 Cookie

便捷、快速、稳定、高性能!以 GPU 实例演示 Alibaba Cloud Linux 3 对 AI 生态的支持 | 龙蜥技术

OpenAnolis小助手

Linux 开源 gpu 操作系统 龙蜥社区

1分钟实现MySQL大数据量迁移任务

NineData

MySQL 数据同步 数据迁移 NineData 大数据量迁移

简单好用的窗口辅助管理 Magnet 激活中文最新版

mac大玩家j

mac窗口管理软件 窗口管理工具

百度自研高性能ANN检索引擎,开源了

百度Geek说

开源 ann 企业号9月PK榜 检索引擎

基于 LLM 的知识图谱另类实践

NebulaGraph

图数据库 知识图谱 LLM

“历久弥新 | 用AI修复亚运珍贵史料”活动震撼来袭!

阿里云大数据AI技术

机器学习 阿里云

楠姐技术漫话:接着唠唠社区发现 | 京东云技术团队

京东科技开发者

图计算 社区发现 风控算法 企业号9月PK榜

如何选择网线

小齐写代码

Aiseesoft FoneEraser for Mac(ios数据擦除工具) v1.0.18中文激活版

mac

苹果mac Windows软件 AIseesoft FoneEraser iOS 设备数据清除软件

jdk17下netty导致堆内存疯涨原因排查 | 京东云技术团队

京东科技开发者

Netty jdk17 内存爆表 企业号9月PK榜

MegEngine 7-8 双月报来啦:新版本发布,开发者福利课程,干货满满

MegEngineBot

深度学习 开源 开发者

代币发行dapp|流动性质押lp分红|挖矿系统开发|合约源码实例

V\TG【ch3nguang】

质押挖矿系统开发

虚拟币永续合约跟单交易所系统搭建开发

V\TG【ch3nguang】

质押挖矿系统开发

漆包线工厂云MES解决方案

万界星空科技

解决方案 MES系统

构建一体化云原生安全防御体系,京东云云原生安全平台重磅发布

京东科技开发者

云原生 安全 镜像 京东云 企业号9月PK榜

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