- KDB+ 教程
- KDB+ - 首页
- Q 编程语言
- Q 编程语言
- Q 语言 - 类型转换
- Q 语言 - 时间数据
- Q 语言 - 列表
- Q 语言 - 索引
- Q 语言 - 字典
- Q 语言 - 表格
- Q 语言 - 动词 & 副词
- Q 语言 - 连接
- Q 语言 - 函数
- Q 语言 - 内置函数
- Q 语言 - 查询
- Q - 进程间通信
- Q - 消息处理器(.Z 库)
- KDB+ 有用资源
- KDB+ - 快速指南
- KDB+ - 有用资源
- KDB+ - 讨论
KDB+ 架构
Kdb+ 是一款高性能、高容量数据库,从一开始就设计用于处理海量数据。它完全是 64 位的,并且内置了多核处理和多线程功能。相同的架构用于实时和历史数据。该数据库包含其自身强大的查询语言 q,因此可以直接在数据上运行分析。
kdb+tick 是一种允许捕获、处理和查询实时和历史数据的架构。
Kdb+/tick 架构
下图提供了典型 Kdb+/tick 架构的概览,随后简要解释了各个组件和数据流。
数据馈送 是时间序列数据,主要由数据馈送提供商(如路透社、彭博社或交易所)提供。
为了获取相关数据,数据馈送中的数据会被馈送处理器解析。
馈送处理器解析数据后,数据会发送到行情引擎。
为了从任何故障中恢复数据,行情引擎首先将新数据更新/存储到日志文件中,然后更新其自身的表格。
更新内部表格和日志文件后,实时循环数据会持续发送/发布到实时数据库以及所有请求数据的链式订阅者。
在每个营业日结束时,日志文件会被删除,创建一个新的日志文件,并将实时数据库保存到历史数据库中。将所有数据保存到历史数据库后,实时数据库会清除其表格。
Kdb+ Tick 架构的组件
数据馈送
数据馈送可以是任何市场或其他时间序列数据。将数据馈送视为馈送处理器的原始输入。馈送可以来自交易所(实时数据流)、汤森路透、彭博社等新闻/数据提供商或任何其他外部机构。
馈送处理器
馈送处理器将数据流转换为适合写入 kdb+ 的格式。它连接到数据馈送,并从馈送特定格式中检索和转换数据,转换为 Kdb+ 消息,并将其发布到行情引擎进程。通常,馈送处理器用于执行以下操作:
- 根据一组规则捕获数据。
- 将数据从一种格式转换为另一种格式(/丰富)。
- 捕获最新值。
行情引擎
行情引擎是 KDB+ 架构中最重要的组件。它是行情引擎,实时数据库或直接订阅者(客户端)连接到它以访问财务数据。它以发布-订阅机制运行。一旦您获得订阅(许可证),就会定义来自发布者(行情引擎)的滴答(例行)发布。它执行以下操作:
接收来自馈送处理器的数
行情引擎接收数据后,立即将其副本存储为日志文件,并在行情引擎获取任何更新时更新它,以便在发生任何故障时,我们不会丢失任何数据。
客户端(实时订阅者)可以直接订阅行情引擎。
每个营业日结束时,即实时数据库收到最后一条消息后,它会将当天所有数据存储到历史数据库中,并将相同的数据推送到所有订阅了当天数据的订阅者。然后它重置所有表格。一旦数据存储到历史数据库或其他直接链接到实时数据库 (rtdb) 的订阅者中,日志文件也会被删除。
因此,行情引擎、实时数据库和历史数据库都以 24/7 方式运行。
由于行情引擎是一个 Kdb+ 应用程序,因此可以使用 q 查询其表格,就像任何其他 Kdb+ 数据库一样。所有行情引擎客户端都应该只能作为订阅者访问数据库。
实时数据库
实时数据库 (rdb) 存储当天数据。它直接连接到行情引擎。通常,它会在交易时段(一天)存储在内存中,并在一天结束时写入历史数据库 (hdb)。由于数据(rdb 数据)存储在内存中,因此处理速度极快。
由于 kdb+ 建议 RAM 大小应为每天预期数据大小的四倍或更多,因此在 rdb 上运行的查询速度非常快,并且提供卓越的性能。由于实时数据库仅包含当天数据,因此不需要日期列(参数)。
例如,我们可以执行以下 rdb 查询:
select from trade where sym = `ibm OR select from trade where sym = `ibm, price > 100
历史数据库
如果我们需要计算公司的估值,则需要其历史数据可用。历史数据库 (hdb) 保存过去交易的数据。每天的新记录都会在一天结束时添加到 hdb 中。hdb 中的大型表格要么以展开方式存储(每列存储在其自己的文件中),要么按时间数据进行分区存储。此外,一些非常大的数据库可以通过 par.txt(文件)进一步分区。
这些存储策略(展开、分区等)在从大型表格中搜索或访问数据时非常有效。
历史数据库也可用于内部和外部报告目的,即用于分析。例如,假设我们想从交易(或任何)表名中获取 IBM 公司在特定日期的交易,我们需要编写如下查询:
thisday: 2014.10.12 select from trade where date = thisday, sym =`ibm
注意 - 一旦我们对 q 语言有所了解,我们将编写所有此类查询。