数据流定量属性的规则编程
1. 引言
在金融行情、传感器数据流、网络流量监控和网页点击流等众多应用场景中,核心计算问题是将数据流映射为数值。以往的流处理研究主要集中在为特定功能设计高效的空间算法,如计算序列值的平均值或中位数,以及将流处理集成到传统数据管理软件中。而我们的目标是为数据流的复杂查询提供高级编程抽象,支持诸如求和、求差、求最小值、求最大值和求平均值等数值运算符,并自动编译为高效的底层流处理实现。
1.1 示例动机
假设输入数据流是银行 ATM 的交易记录,考虑如何以自然、模块化和高级的方式表达查询:“平均而言,Alice 每月向她的账户存入多少钱?”我们可以将此查询自然地表示为两个查询的组合:查询 f1 将输入流映射为仅包含 Alice 存款交易的流,查询 f2 计算每月存款总和的平均值。这种过滤和流处理器的级联组合在许多现有流处理语言和系统中很常见,我们的方案中包含一个流组合运算符来表达它:f1 ≫ f2。
1.2 数值计算表达
对于查询 f2,直观的分解是将输入流拆分为一系列子流,每个子流对应一个月的交易。我们可以编写一个函数 f3,将一个月的交易序列映射为其累计总和。所需的函数 f2 则将输入流拆分为子流,每个子流匹配 f3 的输入模式,对每个子流应用 f3,并通过求平均值组合结果。在我们提出的演算中,f2 写为 iter - avg(f3),这是正则表达式中 Kleene - * 操作的“定量”推广。
1.3 核心规则构造
我们的语言中的迭代器可以嵌套,并且可以在不同级别使用不同的聚合运算符。例如,要指定修改后的查询“平均而言,在一个月内,Alice 一天内存入的最大金
超级会员免费看
订阅专栏 解锁全文
1万+

被折叠的 条评论
为什么被折叠?



