收起目录

一、什么是KDB+

以下内容来自于Nick Psaris的Q Tips Fast,Scalable and Maintainable kdb+ 一个典型的数据库一般会涉及三个团队:数据库架构设计者、数据库管理员和数据库使用者。

Kdb+是将三个团队融为一体,使用者既是架构架构设计者也是数据库的管理员。使用者将获取的数据存储到kdb+中,然后进行分析,使得这可以实现的原因是kdb+是一个文件系统与q编程语言的结合。数据库的备份、权限、分段等由文件系统来完成,表的创建、删除、修改则既可以由文件系统完成,也可以由q编程语言完成。q允许数据从较小的内存中的表开始,当表的数据增加,内存不够时我们可以将表移动到磁盘,同时如果有大量的数据,我们则可以将数据划分为多个目录或者文件系统,这些功能的实现均不需要数据库管理员。当然如果能够将数据库架构设计者、数据库管理员和数据库使用者三个角色分开,者对成立大型项目团队也是有好处的。

常见的数据分析流程一般是:连接数据库查询数据信息,返回数据查询结果,然后进行数据分析。例如Python通常用于数据的提取,R语言或者Matlab通常用于数据的分析。我们可以使用kdb+作为后端数据库,然后使用q语言作为脚本语言来实现数据的提取与分析,因为脚本语言和数据库的操作语言都是基于q语言的,所以可以在脚本中定义相应函数功能,然后在数据库上进行执行,并返回执行结果,这就使得数据和分析无缝链接。因此,使用q语言可以直接将分析发送到数据库后端进行执行,然后返回相应的分析结果。

Kdb+的优势就是使用q语言来作为开发语言来建立和查询数据库,这就比其他数据库使用高级编程语言来操作更加有优势。你可以通过使用表或者更高级的数据库来作为分析层。kdb+除了的基本数据结构例如列表和映射,也有表。

Kdb+最大的优势就是速度非常快,它是面向列的数据库,这与大多数数据库有着本质的区别,大多数数据库都是以行来存储数据,kdb+则是按照列来存储数据,同时每列在内存或者磁盘中都是连续存储,从而允许以惊人的速度来执行计相应的操作。当列向量运算结果用作下一个运算输入的时候,可以立即访问存储在CPU的内存高速缓存中的所有数据,就无需搜索活着查找内存上的较慢或者较大的高速缓存。现在CPU都提供自定义接口来加速向量的运算,kdb+充分利用这个功能来获得最佳性能。数据以列的形式存储而不是以行的形式存储,我们可以在需要的时候将需要用到的列映射到内存中或者从内存中映射出来,这就降低了将所有数据都加载到内存中的需求。与此同时,kdb+的所有updates操作都是在单线程中进行,这就消除了任何数据锁定的限制,从另外一个方面提升了性能。

二、核心优势

kdb+是一款独一无二、性能极高、堪称天才之作的数据库产品,由ArthurWhitney开发,KxSystems公司(https://kx.com) 于2003年推出,其前身k和kdb/ksql分别于1993年和1998年推出。kdb+软件大小不足1MB,却集时间序列数据库、内存数据库、磁盘数据库等为一体,提供了流数据、实时数据、历史数据的采集、存储、分析、检索一站式解决方案。kdb+主要应用于金融证券行业,目前扩大到制造业、电信、汽车、航天、物联网、零售等各个领域。

kdb+内置专用矢量语言q,可以直接对数据库中的数据进行操作,而无需将数据传输到其他应用程序进行分析。q语言是一种抽象编程的APL系语言,是一种基于矢量的处理语言,非常适合低成本地对大量数据进行复杂的计算。而且q语言跟SQL有一些类似,对于有数据库基础的人较容易掌握。

kdb+/q的核心优势主要有:

(一)强大的一体化平台

1、流数据处理、内存数据库和磁盘数据库的一体化。许多应用场景需要同时具备流数据处理、内存数据库和磁盘数据库等,三者通常由不同的软件实现,kdb+用单一软件即可用于流数据、实时数据及历史数据的处理。

2、数据的采集、存储和分析的应用一体化。通常数据的采集、存储和分析是分离的,同一架构无法同时支持,而kdb+轻松实现了三者的一体化。

3、数据库和开发语言和的一体化。传统数据分析在某种意义上是一种数据移动的过程,要分析的数据从数据库转移到分析服务器或者分析程序上进行处理,kdb+通过库内分析(in-databaseanalytics),消除将海量数据移动到分析程序的开销,提升了数据分析处理效率。

4、代码与数据一体化。传统的数据库或语言,代码是代码,数据是数据,一般难以以统一的方式进行处理,kdb+将代码和数据进行了抽象,实现了代码与数据的一体化。

(二)高性能的列式数据库

1、列式存储结构简化了索引与联接,提高了查询速度。传统关系数据库针对事务更新进行了优化,采用行式存储和磁盘随机分布以便于并发快速写入,但查询时必须进行磁盘扫描。kdb+采用列式存储和有序化存储,数据聚集和列向查询性能得到极大提升,同时在数据库运行时可以方便地对数据列进行增删改。

2、kdb+可以利用列的有序性(如时间戳字段)优化查询,迅速定位到所需数据子集。

3、内存数据库可以实时更新索引,方便对流数据进行分类汇总统计,比如VWAP计算。

(三)强大的编程和查询语言q

1、kdb+内置了高速应用开发和数据查询的一体化语言—q。q可以直接对数据做出运算,最大限度的减少中间成本。它无需先读取数据,然后再送到外部的程序进行分析,当接收到数据时就能马上进行处理。q语言使用同样方式处理原子数据和高维数组,代码精炼,运行高效,易于并行扩展。

2、数组、字典和表都是原始数据类型,而其核心原语是专为此类数据而设计,例如对表作算术运算。单一操作就能作用于千万笔记录上,就像操作一笔记录那么容易。

3、q语言内置的时间数据类型,高度优化了对时间序列数据的查询。日期、时间和纳秒级时间戳都是基本数据类型,可高效实现时间序列统计和OLAP查询。

4、每秒钟能处理数以千万计的记录,而每天则以亿计。历史数据库的记录则以万亿计。它的速度能应付最高的数据流量,更可以配合硬件加速器以获得最高速度和最大的灵活性。

5、函数式编程语言和交互式开发环境,使得开发效率极高。

(四)简单的数据管理和低廉的成本

1、原生64位架构,可以适应当前海量数据处理需求。

2、kdb+自身占用极少的内存和磁盘资源,通常部署于多处理器服务器上,但可任意动态扩展。

3、kdb+无需复杂的安装和配置,可简单部署在多种操作系统下共同运行。

4、与传统数据库繁重的管理任务相比,kdb+平台极其简单明了,提供更低的拥有成本和更高的运作效率。

5、数据库就是操作系统中的原生文件,数据库管理由操作系统功能直接完成。

6、访问控制、高可用性、事务日志、容量规划和其他企业级特性都在应用层完成,可方便与现有系统集成。

(五)优越的可移植性和互操作性

1、kdb+使用ANSI C开发,未使用任何专有扩展,可快速移植到最新的芯片和操作系统之上。

2、API非常简洁,可以很容易地连接到外部的图形、表格生成和旧系统。除了用于标准数据库技术的ODBC和JDBC连接器之外,还有一些接口C/C++,Java,Python和.Net,可帮助在kdb+与传统数据库或Excel等应用程序之间迁移数据。

3、kdb+可以直接解析常见的数据文件格式如csv和xml。

4、用户可以通过kdb+内置的web服务器功能直接访问数据。

5、动态索引让kdb+能有效地利用实时数据。

6、kdb+系统可运行于Linux、Solaris、Windows、MacOSX等64位服务器平台。

(六)分布式并行扩展以保证查询速度

1、内置多线程并行计算功能。计算效率跟CPU的数目成正比,应用程序能利用多核心处理器的优势,而无需编写特殊的多线程程序。

2、支持并行访问庞大的历史数据库,所以能将查询分配至多个内核或多台机器。

3、kdb+使用分区技术支持并行扩展,可以分配特定的CPU和磁盘到特定查询操作。

4、kdb+的进程间通讯功能可以轻易支持多服务器的并行计算或网格计算。

三、许可类型

为满足不同的需求,kdb+提供了多种许可类型可供选择。下表列出了各种许可的比较。

license

下一篇: KDB+ - 教程