关系型和列式数据库kdb+以能够异常快速地分析实时及历史数据而闻名。这使得kdb+成为涉及大量时间序列数据的金融市场和工业物联网应用的技术。这是由于时序型及关系型数据在kdb+中以便于操作和查询的佳方式存储。尽管市场上还有其他的列式数据库,但是没有能将这些方面很好地结合在一起的数据库。
与其他替代技术相比,这种优化使kdb+在处理时间序列数据时可以提供更好的性能。下面列出了不同kdb+客户在单个服务器上运行所实现的性能情况。
每秒摄取和存储3000万个传感器读数,每天超过10TB
在不到2分钟的时间内收集超过400亿个传感器读数
每秒检索超过1亿个传感器读数
以每秒40亿条记录的速度搜索内存表
流事件处理亚毫秒级延迟
为什么kdb+可以这么快地处理数据?
使kdb+独树一帜的是,它作为一个内存数据库及时间序列数据库,可以提取数据并立即将其用于查询。这使它非常适合物联网应用中的数据提取、存储、处理和时间序列分析,包括制造业的物联网传感器数据和金融市场数据。
为了实现佳性能,首先使用指定的模式(schema)将数据放在内存表中,并通过磁盘日志对其进行保护。数据先进入内存,可立即用于查询,使得kdb+在单个服务器上具有比其他技术更高的数据接收速率,支持每秒数百万次、每秒数百MB、每天数TB的读取。
随着内存的消耗,数据从内存数据库(称为实时数据库,real-time database,RDB)迁移到磁盘临时表(称为日内数据库,intraday database,IDB)。IDB可以按任意可配置的时间间隔将表进行分区存储,通常为5、10、30、60分钟,具体取决于数据量和可用内存大小。然后数据被进一步组织、排序、迁移到更的磁盘数据库表中(称为历史数据库,Historical Database,HDB)。IDB和HDB可以利用各种分层存储介质,例如固态存储器(SSD),硬盘驱动器(HDD),存储区域网络(SAN),网络附属存储(NAS)和并行文件系统等,为客户提供选择以优化性能和数据存储成本。
这种提取过程充分利用了对磁盘进行顺序写入操作的性能优势,并使数据立即从内存可用,从而提供了比其他技术更好的性能。此外,数据库表的结构(列式)允许对磁盘上的表进行批量写入,从而可以更有效地提取数据。
通过这种方法,我们能够用较少的基础架构支持大量数据,特别是当每日数据量超过单个服务器上的RAM时,同时还能提供出色的查询性能。另一个额外的好处是,当单个系统同时支持实时和历史分析功能时,不需要为了分析而生成数据副本。
为什么kdb+查询速度这么快?
kdb+如此之快的三个主要原因是:
kdb +是面向向量的数据库,具有内置的编程和查询语言
整个kdb+数据库和查询语言占用的空间非常小(800 KB)
kdb+针对数据存储进行了优化
这三个因素中的每一个都使kdb+更快,但是综合起来,它们使它更加强大。尽管市场上还有其他时序、列式或向量数据库,但没有将所有这些方面结合在一起的数据库。那么,它的具体优势是什么?
向量方法允许一次同时对多个数据点进行操作,因此可以减少实现某项操作所需的操作次数。这消除了对每一块数据的重复操作,并大大减少了开销。
借助内置的编程和查询语言,分析可以在“数据库”中进行(即库内分析),而无需通过网络或其他计算或分析层移动数据。kdb+在数据库中执行计算,聚合和过滤。
kdb+占用空间小(800KB),可以将所有q操作驻留在CPU的快区域(L1/2缓存)中,因此操作很好地利用了它的速度。
数据的列式结构对于查询更加有效,因为数据检索更多地针对所需的数据元素,而不是整个数据范围。这大大减少了不需要的数据扫描和检索量。
磁盘数据以内存映射文件的形式存储,因此数据库无须将数据在磁盘上的表示形式转换为内存形式。这有助于减少数据表示形式转换所需的CPU时间。
多层存储(RAM,SSD,HDD)使得可根据用例实际情况优化性能和成本。例如,将重要和常访问的数据保存于RAM和SSD中,可以带来亚毫秒级的响应时间。
与其他数据库技术的比较
如我们所展示的,kdb+配备了一个针对高性能处理和查询时间序列和关系型数据而优化的编程系统。与其他技术相比,这种优化使kdb+在处理传感器及相关数据时,可以提供更好的性能。
通过采用另一种解决方案运行一系列性能测试,并将结果与基准进行比较,我们能够评估kdb+相对于其他数据库技术的性能。结果如下所示。
每秒规范化查询次数
对于完全独立和经审核的性能基准,安全技术分析中心基准委员(Security Technology Analysis Center Benchmark Council)进行了许多测试,对低延迟,高容量的一系列技术进行了比较,kdb+在STAC的结果中有很好的表现。你可以通过https://stacresearch.com 访问STAC。
结论
数据的传输速度和数量不断增长,需要更快地对数据进行分析,这对传统的方法和数据库提出了挑战,因为它们从未被设计以支持这些需求。例如,我们看到各行各业的数据量和数据速率增长了10倍至100倍。在制造工厂中,更高频率的传感器(100Khz到1Mhz)正在捕获更为精细的数据。在汽车行业,越来越多的传感器(数千到数百万个)被部署在各个车辆上。像这样的组织需要更快地分析更多的数据,以便他们可以为客户提供更好的产品和用户体验。
kdb+非常适合这些需求,因为它独特地将更高性能的内存、列式和关系数据库与集成的面向向量的编程系统结合在一起。我们的客户正在使用kdb+对其应用程序的性能和可扩展性进行重大的改善,尤其是监督控制和数据获取、故障检测和预测、数据仓库以及资本市场交易和监测系统等。
来源 https://www.modb.pro/db/212284