KDB/Q是什么语言?

2022-05-25 00:00:00 数据 分析 数据库 实时 历史数据
作者:匿名用户
链接:https://www.zhihu.com/question/26882540/answer/167650095

一、KDB是什么

kdb+是支持实时业务的高效的一体化数据库和应用平台。

l KDB+是KX公司开发的一款64位跨平台高性能数据库产品

l 使用统一的数据库处理实时数据(内存)和历史数据磁盘(),完成数据的采集/存储和分析工作。

l 同时具备CEP(复杂事件处理)引擎/内存数据库/数据仓库的功能。

l 内置通用开发语言q:q语言是向量化函数式交互式脚本语言,卡法效率和运行效率,功能远比传统数据库的存储过程强大。

Kx系统创立于1993年,其目的是为了解决传统关系数据库技术无法跟上这些不断上升的数据量。公司的核心产品kdb+建立在一个能操作实时数据和历史数据的单一架构。数据库有其自己强大的查询语言q,所以能直接对数据进行分析。多年来,K x大幅改进了kdb+的效能以跟上数据量上升的需求。许多大客户都使用我们的kdb+作为整个企业的市场数据服务器, 而OEM 客户则使用 K x 技术以提供包括数据分析、投资、保险及业务性能监控等类型广泛的软件和服务。

二、kdb+的主要应用领域:金融业

交易:每秒百万级消息

分析:万亿记录级数据库:orders,quotes,trades…

实时风险管理

实施风险监控

Monte carlo仿真

三、主要客户

大型金融机构:银行、投行、券商、基金

对冲基金

交易所

数据服务商

四、KDB的三层架构:

底层:两种解释型通用编程语言:K和Q

K解释器由约1200行ANSI C代码实现。

Q语言是由K语言实现,在没有效率损失的前提下提供了更好的代码可读性。

K函数和Q函数在加载时预编译为字节码,其执行效率远高于一般的解释型脚本语言。

运行于windows、linux/solaris/macosx的32位或64位环境下

中间层:同时具备内存数据库和磁盘数据库的时间序列数据库:kdb+

一、效能。

Kdb+所提供的显著效能之所以能优于其它数据库系统,全因专注于以下多个关键因素:

• 原生64位元架构 - - - 这是管理今时今日数据量的必要条件。旧日的32位元系统根本无法跟上。

• 内置多核心处理和多线程。效能是跟中央处理器(CPU)的数目成正比,应用程序能利用多核心处理器的优势,而无需编写特殊的多线程程序。

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

• 列式结构数据库简化了索引与连接,显着提高搜索速度。

• 发布和订阅机制把操作从主服务器卸载到一连串的服务器上,并能够提供数据服务给几乎无限量的用户端

• 一个单一的解决方案就可应用于实时及历史数据和分析。尽量减少数据从接收至完成分析的所需时间是极为重要的---而这是取决于能否把由一个进程到另一个进程之间的所需步骤减至小。kdb+能处理一切事务---数据采集、存储、日志、事件处理、分析、实时和历史数据库。

• 基本数据类型有日期、时间和时间戳(至纳秒),这使得时间序列分析极其快速。

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

• 批量插入与更新优化(不是简单的每次一笔交易)。交易数据通常是整块地到达,又无需逐笔逐笔地写入。此外,数据库不必离线,就可以进行批量交易。

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

二、

kdb+ 的发展是由客户的需求所推动的,它在市场上保持着显著的领先地位。新的3.0版本,包括增强在运行英特尔新的处理器时处理速度有相当大的改进,GUID/UUID(标识符,促进了分布式系统的设计)和简化了对数十亿条记录的存储以及支持WebSocket。

• 在执行时, kdb+ 的优化代码使用了处理器提供的特殊指令: 当使用英特尔新一代的 Sandy Bridge 系列处理器时,利用英特尔的矢量扩展(AVX)和SSE指令集执行计算时,测试中会发现速度有非常显着的提升。

• 新增的UUID作为一种基本数据类型,对分布式系统是特别有用的。UUID可独特标识不同的记录,例如订单交易标识和确认标识等,让分布式处理更加有效,也让系统的设计更简单直截。

• 在外汇和股票市场上,金融衍生工具、交易量、以及监管要求的不断增加,要求机构需要存储和分析大量的数据。这存储的改进简化了每天需要处理数十亿条记录之大型系统的设计和实施。

• 支持Websocket 允许浏览器和应用程序之间作出直接,双向和全双工之连接。这提供了比HTTP/AJAX更大的扩展性和更快的处理速度。这对基于浏览器的高性能应用程序特别有用,例如实时数据可视化应用程序。

三、分析引擎

kdb+包含一个可直接支持数据库的通用编程语言q。对比那些必须使用传统SQ L 数据库语言或须依赖供应商所预先编写的查询程式之用户来说,这有莫大的优势。有了q,用户可以对急切的需要作出快速的反应。

• q可以直接对数据作出运算,大限度的减少通信流量。它毋需先读取数据,然后再送到外部的程式进行分析。当接收数到据时,就能马上进行事件处理。

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

• 该语言内置的时间数据类型,高度优化了对时间序列数据的查询。

• 数据属性,例如“已排序”可作用于列以优化其性能。

• q 有类似SQL的数据库查询,而且其功能更超越传统的SQL。

• q 的互动环境提供对“快速开发”所必须的“即时反馈”。

四、实时数据处理kdb+tick

kdb+有一个kdb+tick模块以能佳地利用 kdb+与tick数据(实时数据流)。

• kdb+ tick 每秒能采集、管理和分析数百万笔记录——从容地应付任何交换所的高峰时期---及万亿字节(TB)计的历史数据。

• 此模块结合实时和历史数据在单一的数据库内。

• 每天结束时,不必抛弃内存的数据。相反,可以把它储存在历史数据库中。

• kdb+ tick 允许对内存数据和历史数据, 编写复杂的时间序列分析程序。

• 内置包括路透社(Reuters),Tibco和彭博(Bloomberg)等发送处理程序。视乎发送格式的复杂程度,定义新架构和安排发送处理程序,一般只需要几分钟到几个小时。

五、系统架构

kdb+ 系统可运行于工业标准的L inux、Solaris、视窗、M ac O S X等6 4位元服务器平台。此外,该软件:

• 对储存结构没有任何限制——可以使用本地硬盘、SAN和NAS,并可根据喜好或公司规范而进行配置。

• 占用资源极少,因此可以很简单直接地安装。只需数分钟就可以完成设置及运行kdb+。

• 以普通的本地文件格式储存数据库。这意味着能使用操作系统标准命令和公用程序来管理数据库(例如备份及恢复)。

• 有一个非常简洁的API,这很容易就可以连接到外部的图形、报表生成和旧版本系统。又有连接C/C++、Java、.N ET、R、Matlab、Perl、Python等等的界面,而其中一些是来自 K x 用户社区。还能透过O DBC 或 JDBC 与其它应用程序( 例如 Excel) 相互操作。

• 允许在应用程序层面上处理诸如安全、故障时自动备份、事务日志、容量规划等企业环境特性。这令kdb+ 能轻松地配合现有的操作。

• 支持群集、网格、云端及其它类形之大型分布式网络架构。

• 内置网页服务器、以及文件操作、传输与管理等工具。

• 不论短期和长期的效益需求,都允许几乎无限的增长空间,帮助降低所有权总成本。


六、客户支持

Kx十分重视客户的需要,对能成为在支援服务方面负责任的供应商之一而引以自豪。当收到回报问题时,就会快速回复——一般在几分钟内,并在当天就可作出更全面的解决方案——并由一位熟识其代码的人负责,而并非由外包支援中心照本宣科地回复。

• 新开发是由客户要求所推动。例如,前一个Kdb+版本推出的内置文件压缩功能,就是由几个公司的客户所要求的。

• 在这里有一个活跃的电子邮件用户论坛,—客户可以张贴问题或讨论大众感兴趣的课题。还有一个活跃的维基网,内容包括说明文件,实例集,教程和附加软件等。

• 一个32位的免费试用版让任何人都可以学习这语言。这试用版是由 kdb+个人开发小组所支持, 网址为http:/ /http://groups.google.com/group/personal-kdbplus。

相关文章