Timeplus Proton真是快到极致!

原创
2023/12/04 19:20
阅读数 140

原文链接:https://www.timeplus.com/post/scary-fast

随着上周苹果宣布了3纳米的M3芯片,Timeplus团队也在万圣节前夕思考着所谓的“惊人速度”。不过,我们的专长在于设计一些“快速”的软件,而不是硬件。因此,我们现在想向你展示如何在普通计算机上使用Timeplus构建你独有的“拥有惊人速度”的流式数据处理系统。

以下是一个预览,展示了你如何可以每秒查看数百万事件:

以上的核心处理引擎便是Timeplus的Proton。现在,我们Timeplus的核心引擎Proton已经开源,这是一款全新的流式数据处理优先、统一历史数据从存储到计算原生一体化的实时数据平台。

就在万圣节当天,我们发布了如何使用homebrew安装Proton,并且我们还会介绍一些使用合成数据展示性能的“小技巧”。

brew tap timeplus-io/timeplus
brew install proton@1.3.18

从终端运行命令行程序:

proton local

现在你处于一个Read-Eval-Print Loop(REPL)环境中,可以输入SQL语句和查询

运行SQL查询

让我们先创建一个特殊的流以生成随机数据

CREATE RANDOM STREAM livedata(
    EventTime datetime64(9, 'UTC') default now(), 
    Key string default 'Key_'||to_string(rand()%4), 
    Val float default rand()%1000/10
)
SETTINGS eps=300e6;

这将创建一个名为“livedata”的流,这个流具有典型的时间-键-值(Time-Key-Value)结构。在资本市场中,这可以是一个股票符号-价格对(symbol-price pair)。在工业物联网(IIoT)中,这可以是传感器的标签或点标识符以及测量值(如温度、压力等)。EPS设置指定系统每秒将产生3亿个数据点。

当你在Proton中查询这个流时,你将会看到前10,000行数据,然后会看到一个进度条,表示查询正在不断处理中。

SELECT * FROM livedata;

一台配备M2 Max芯片的MacBook Pro每秒处理大约8900-9000万个事件(系统同时也在创建“livedata”流)。

你可以随时随地尝试不同的EPS设置,你也可以运行以下命令来删除这个流:

DROP STREAM livedata;

在M2 Max上,最大的值大概约为300M eps。

值得注意的是,你们只需要使用流式SQL语法,利用你们所了解的SQL知识就可以使用,无需要学习其他特定语言或寻找他人帮助。

想象一下,如果你需要合并两个流——也许是因为其中一个提供很大的对照表(例如:网络基础设施遥测和业务应用程序仪表数据),又或者是因为这是两个或多个通过不同方法传输的流。

我们现在创建两个流:

CREATE RANDOM STREAM live_A(
    aEventTime datetime64(9, 'UTC') default now(), 
    aKey string default 'Key_'||to_string(rand()%4), 
    aVal float default rand()%1000/10
)
SETTINGS eps=100e6;

CREATE RANDOM STREAM live_B(
    bEventTime datetime64(9, 'UTC') default now(), 
    bKey string default 'Key_'||to_string(rand()%4), 
    bVal float default rand()%1000/10
)
SETTINGS eps=100e6;

然后,将这两个流根据匹配的键进行合并,并在时间线吻合时执行操作:

SELECT
    live_A.*, live_B.*
FROM live_A
ASOF JOIN live_B ON 
    live_A.aKey = live_B.bKey 
    AND live_A.aEventTime < live_B.bEventTime;

我们看到大约每秒3千万个事件:

这是资本市场交易中常见的模式:将报价和交易数据进行合并,用来更好地了解价格发现过程。(更多关于这个主题的信息将在之后的文章中提供)

这些数据流的合成性质使得测试不同用例模式变得更加容易。

举几个例子:

  • 在资本市场中,你可能会有与数千家公司股票价格相关的数据流。
  • 在期权或衍生品交易中,任何资产都可能有多个合同,因为不同合同的到期日期不同,这样的合同数量可能增加到数万个
  • 在工业物联网(IIoT)中,比如半导体高科技制造领域,你可能会有数十万个传感器(标签-值类型)。
  • 在网络领域,你可能需要根据大量实体进行分组(基数可能达到数百万)。

为了快速验证这些不同用例的性能,你可以简单地更改随机流的配置和设置。对于100万个可能的键,你可以重新运行查询:

CREATE RANDOM STREAM livedata(
    EventTime datetime64(9, 'UTC') default now(), 
    Key string default 'Key_'||to_string(rand() % 1e6), 
    Val float default rand()%1000/10
)
SETTINGS eps=10e6;
SELECT Key, 
    avg(Val) AS AvgVal 
FROM livedata
    GROUP BY Key
SETTINGS group_by_two_level_threshold_bytes=1e9;

这个查询会计算所有值的平均值,这些值以每秒1,000万次(eps=10e6)到达,按100万个键(与100万个随机上,拼接上前缀)进行分组。

我们一直以来的目标是为统一的分析提供直观和强大的引擎。Proton能够提供如此惊人的EPS数据,我们感到很兴奋,也迫不及待地期待看到开发者们是如何使用它的。

快来试用Proton吧,按照上述步骤进行homebrew安装,尽情感受快到极致的处理数据的性能。要查看更完整的演示,请查看包括RedpandaOwl-Shop电子商务示例(Owl-Shop e-commerce example)等的Docker Compose镜像,以及更多其他示例。

请在我们的GitHub上查看我们的入门指南:https://github.com/timeplus-io/proton#readme,并通过给我们项目点赞来表示支持!

祝各位都能享受流式数据处理的乐趣!更多信息请访问:timeplus.comhttps://github.com/timeplus-io/proton,同时也欢迎大家多多关注我们微信公众号:Timeplus 公司。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部