暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

kdb+性能比较

kdb中文教程 2021-01-06
575

Hugh Hyndman是Kx公司工业物联网解决方案负责人,这是他写的一篇关于kdb+性能比较的文章。主要结论为:kdb+具有超越其他数据库一至两个量级的性能表现,例如,kdb+比Cassandra快20倍以上,比ElasticSearch快440倍,比MongoDb快38倍,InfluxDB快33倍,比OpenTSDB快123倍等。原文链接为https://kx.com/wp-content/uploads/2020/11/KdbTransitive-Comparisons-1.pdf。




KDB+ 性能比较

(基于传递性的Kdb+性能对比测试)


2018年5月15日

Hugh Hyndman



2017年夏天,笔者写过一篇关于在树莓派(Raspberry Pi)上运行kdb+的博文,文章主要讨论了利用InfluxData公开发布的性能测试方法生成、存储测试数据,并运行一系列用于性能测试的查询。鉴于kdb+的优异表现,笔者得出结论,认为kdb+是用于小平台或边缘计算的不二之选。
在此基础上,笔者个人感觉为了Kx社区应当进一步进行研究:对InfluxData提供过性能测试文档的所有产品(Cassandra, ElasticSearch, MongoDB以及OpenTSDB),在树莓派以外的多种硬件配置上与kdb+进行性能对比测试。
这项测试的难点在于,笔者并没有时间逐一安装、配置各项工具(更别说是在树莓派上进行了)。因此笔者打算另辟蹊径,采取一种基于传递性的测试方法:如果a的值大于b,而b的值大于c,则a的值一定大于c。
基于以上逻辑,并原封不动地接受InfluxData提供的性能测试结果的话,笔者认为,仅需在笔者自己的硬件配置上进行测试,并将测试结果与InfluxData的结果进行对比,即可得出kdb+与其他工具的性能比较结果。此外,由于在InfluxData自己的测试中,InfluxDB的表现大大优于其他数据库,若kdb+能够超越InfluxDB的表现,那么根据传递性,kdb+会成为本次测试中最快的数据库。
本文总结了笔者开展性能测试所采用的数据、查询及硬件环境,及最终的测试结果。


数据

本文采用的原始数据取自标准服务器环境在24小时中产生的系统及应用指标,涉及CPU、内存、硬盘、硬盘I/O、内核、网络、Redis、PostgreSQL及Nginx九个维度。在不同测试中,上述数据取自100至1000台服务器,时间跨度为4小时至4天。
所有的原始数据集均通过每10秒采集100项指标产生,数据规模相对较小(kdb+可以轻松支持万亿级别的数据量),各数据集规模为1.5亿至8.5亿个数据点。由于数据集规模小,笔者并未通过分布式存储和分区来利用kdb+内生的高效并行计算。

查询
表1总结了InfluxData运行的性能测试查询,及笔者为对比性能在kdb+上相应运行的查询。请注意,由于本次测试的对象并不全是时间序列数据库(例如Cassandra, MongoDB和ElasticSearch),在各平台上运行的查询基于并发性及其他平台特点进行过调整,并非完全相同,以获得各平台的最优测试结果。

表1 性能测试采用的查询内容

编号

查询内容

InfluxData采用的平台对比

数据集时间跨度

1

计算1台主机在指定1小时内,每分钟的各指标最大值

InfluxDB  vs Cassandra

1天

2

计算1台主机在指定12小时内,每分钟的各指标最大值

InfluxDB  vs Cassandra

1天

3

计算8台主机在指定12小时内,每分钟的各指标最大值

InfluxDB  vs Cassandra

1天

4

计算1台主机在指定1小时内,每分钟的各指标最大值

InfluxDB  vs ElasticSearch

4天

5

计算1台主机在指定1小时内,每分钟的各指标最大值

InfluxDB  vs MongoDB

6小时

6

计算1台主机在指定8小时内,每分钟的各指标最大值

InfluxDB  vs OpenTSDB

4小时

与笔者以前在其他博文中描述的测试不同,本次笔者通过一台客户端生成kdb+测试用例,并将其提交至kdb+服务器上,以获得更为精确的性能比较结果,并在测试中引入网络延迟因素。


硬件
笔者在三类规模各异的硬件平台上通过kdb+执行了查询1-5,其中包括树莓派、MacBook Pro及配置相对适中的服务器。具体硬件配置及InfluxData所采用的硬件配置见表2。

表2 性能测试硬件配置
平台
CPU
内存
硬盘
操作系统
数据库
树莓派
1.2Ghz 四核 ARM Cortex-A53
1GB DDR2 900 MHz
32GB高速闪存卡
Raspbian
Kdb+(32位)
MacBook Pro
(2014版本)
3Ghz Intel Core i7(双核)
16GB DDR3 1600 MHz
500GB 固态硬盘
MacOS 10.13.2
Kdb+(64位)
Kx服务器*
3.2Ghz 四核 E5-2667V3 Xeon (20MB缓存)
32GB DDR4 2133 MHz
300GB SAS 10k
CentOS 7.3.1611
Kdb+(64位)
InfluxData
服务器*
3.6Ghz 四核 E5-1271V3 Xeon (8MB缓存)
32GB DDR3 1600 MHz
1.2TB NVMe固态硬盘
Ubuntu 16.04 LTS
InfluxDB

* 标注*的两项具有相似的硬件配置,以便于精确对比

查询6的硬件配置与前述查询1-5有所不同,因为InfluxData与OpenTSDB的性能对比测试查询在Amazon Cloud的双核m4.xlarge EC2样例上执行。笔者在kdb+上执行查询6时也采用了同样的样例配置。


测试结果

下表总结了kdb+与其他数据库平台的性能测试结果对比,kdb+查询共在树莓派、MacBook Pro及三种相似配置(使用单核、4核、8核进行查询)的Kx Server上执行。最右三列描述了kdb+相较于InfluxDB及其他平台究竟提升了多少倍的计算效率。

以查询6为例,若kdb+比InfluxDB快32.5倍,而InfluxDB比OpenTSDB快3.8倍,则根据传递性,可以认为kdb+比OpenTSDB快123倍。


表3 kdb与其他平台的性能测试结果

注:表中数值单位为各平台每秒钟处理的查询数量

将查询结果可视化,能够更直观地展示上述数据。图1展示了在kdb+、InfluxDB和MongoDB上运行查询5的结果,蓝色为笔者得到的测试结果,最右两列为InfluxDB对外公布的原始测试结果。

图1 kdb+、InfluxDB及MongoDB每秒查询处理量

由于kx 4核服务器的配置与InfluxDB服务器最为相近,我们可以采用4核服务器的结果进行对比。在查询5中,kdb+每秒可以处理107810次查询,MongoDB每秒可以处理2614次查询,kdb+相较于MongoDB有41.2倍的效率提升。其他查询的效率对比见附录。(详见原文,译文此处略去)

总结
Kdb+以世界最快的时间序列数据库而闻名。我们有些工业级用户的系统以kdb+作为支持,每秒可以处理3000万个传感器读数,每天存储超过10TB的压缩数据——在这一切发生的同时,数据库还在同时进行数据查询、复杂事件处理(CEP),并处理数据输入流。
需要承认的是,InfluxData所公布的性能测试方法并不能准确模拟现实中的物联网应用,测试用到的数据库数据结构精简、数据规模小、数据查询逻辑简单。由于技术框架的选择十分重要,而经销商又常会对其产品的处理性能夸大其辞,Kx公司选择用有说服力的数据量、现实的数据负载,以及复杂的多表连接查询来向客户证明,依据产品处理海量数据的性能进行技术选型的重要性。这是检验广告宣传是否贴合实际,以及技术是否真正能够服务于业务的唯一准确方法。任何试图避开上述检验手段的解决方案,其自身就应当被淘汰。
很显然,本文给出的结论并不能构成一次科学、独立客观的kdb+产品性能的检验,但kdb+具有超越其他时序数据库一至两个量级的性能表现这点,值得读者停下来稍作思考。
读者若希望就kdb+性能进一步获取更为严肃的讨论,可参见Mark Litwintschik基于十亿出租车载客数据开展的性能测试(http://tech.marksblogg.com/billion-nyc-taxi-kdb.html)。
读者若希望获取完全独立且经过审计的性能测试结果,STAC性能测试委员会提供了一系列对比低延时、高数据量技术的测试,kdb+在这些测试中表现良好。STAC网址:https://stacresearch.com。

注:作者Hugh Hyndman是Kx公司工业物联网解决方案负责人,工作地位于多伦多。Hugh的工作集中于高性能大数据计算领域,致力于通过引入Kx公司提供的技术,为企业客户的软件系统与产品赋能。


《kdb+中文教程》

  全文链接

前言及目录
第一章  简介
第二章  数据类型
第三章  数组
第四章  字典
第五章  函数
第六章  表与qSQL
第七章  I/O操作
第八章  数据库
第九章  应用例子
第十章  问答(含参考文献)

《kdb+中文教程》

主要内容

kdb+号称是世界上最快的内存数据库,q是kdb+的内置语言。事实上kdb+/q不只是内存数据库,更是一款高性能大数据平台,它使用统一的数据库处理实时数据和历史数据,同时具备CEP(复杂事件处理)引擎、内存数据库、磁盘数据库等功能。与传统关系数据库及现代大数据平台相比,kdb+/q具有更快的速度和更低的总拥有成本,非常适合海量数据的快速采集、存储、分析、处理和检索等。kdb+/q最初主要被用于金融机构海量数据分析和高频交易,目前被广泛用于人工智能、机器学习、物联网、智能电网、航天等领域。

《kdb+中文教程》是一本关于kdb+/q的中文入门书籍,内容分为三大部分:

第一部分(第一章)为kdb+/q简介,主要介绍kdb+/q的优势及不同许可类型,同时介绍了kdb+/q的下载、安装、基本操作及数据表操作等。通过学习本章,读者可以快速了解kdb+/q的特性,同时对kdb+/q的独特、简洁等有一个初步直观感受。

第二章至第八章为第二部分,是本书的核心内容,分别为数据类型、数组、函数、字典、表与qSQL、I/O操作及数据库。首先介绍了kdb+/q的基本数据类型,然后介绍了kdb+/q的数组(列表)、函数、字典、表,最后介绍了文件I/O操作、进程间通讯、数据库构建等。通过这部分内容的学习,读者可以掌握kdb+/q的基础知识,为kdb+/q的运用打下坚实基础,逐步将kdb+应用于实际场景,同时能进一步感受kdb+/q的简洁、灵活与强大等。

第三部分包括第九章和第十章。第九章通过实例介绍kdb+在股票期货数据处理方面的常见应用,包括历史行情数据库构建、策略回测与优化、实时行情处理等,并简单介绍了企业级开源证券期货交易平台Tx。第十章把一些可能有用的知识点以问答形式列出来,方便读者需要时查找。通过这部分内容的学习,读者可以参考常见应用实例,举一反三。



文章转载自kdb中文教程,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论