KDB +架构

Kdb +是一个高性能,高容量的数据库,从一开始就设计用于处理大量数据.它完全是64位,并具有内置的多核处理和多线程.相同的架构用于实时和历史数据.数据库包含自己强大的查询语言 q,,因此可以直接在数据上运行分析.

kdb + tick 是一种允许捕获,处理和查询实时和历史数据的体系结构.

Kdb +/tick体系结构

下图提供了典型Kdb +/tick体系结构的概括,随后是各种组件和数据直通的简要说明.

KDB + Architecture

  • 数据源是一个时间序列数据,主要是由路透社,彭博社或直接来自交易所的数据提供商提供.

  • 要获取相关数据,数据源中的数据由<解析饲料处理程序.

  • 一旦饲料处理程序解析了数据,它就会转到 ticker-plant .

  • 要从任何故障中恢复数据,股票代码工厂首先将新数据更新/存储到日志文件,然后更新自己的表.

  • 之后更新内部表和日志文件,持续发送/发布实时循环数据到实时数据库和请求数据的所有链式订户.

  • 在工作日结束时,将删除日志文件,创建新日志文件并将实时数据库保存到历史数据库中.将所有数据保存到历史数据库后,实时数据库将清除其表.

Kdb + Tick体系结构的组件

数据馈送

数据馈送可以是任何市场或其他时间序列数据.将数据馈送视为馈送处理程序的原始输入.可以直接来自交换(实时流数据),来自新闻/数据提供商,如Thomson-Reuters,Bloomberg或任何其他外部机构.

Feed Handler

Feed处理程序将数据流转换为适合写入kdb +的格式.它连接到数据源,它检索数据并将数据从特定于Feed的格式转换为Kdb +消息,该消息将发布到自动收录机工厂流程.通常使用Feed处理程序执行以下操作 :

  • 根据一组规则捕获数据.

  • 将数据从一种格式翻译(/充实).

  • 抓住最新的数据.

Ticker Plant

Ticker Plant是KDB +架构中最重要的组成部分.它是实时数据库或直接订户(客户)连接的股票代码工厂,用于访问财务数据.它以发布和订阅机制运行.获得订阅(许可证)后,将定义发布者(代码工厂)的勾选(常规)出版物.它执行以下操作 :

  • 从Feed处理程序接收数据.

  • 在自动收报机工厂收到数据后,它立即将副本存储为日志文件,并在代码工厂获得任何更新后更新,以便在出现任何故障时,我们不应该有任何数据损失.

  • 客户(实时订户)可以直接订阅自动收报机.

  • 在每个工作日结束时,即,一旦实时数据库收到最后一条消息,它就会将当前所有数据存储到历史数据库中,并将其推送到已订阅当前数据的所有订阅者.然后它重置所有表.一旦数据存储在历史数据库或其他直接链接的订户到实时数据库(rtdb)中,日志文件也会被删除.

  • 结果,自动收报机,实时数据库和历史数据库全天候运行.

自收件人以来-plant是一个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中的大表要么以sppeded的形式存储(每列存储在自己的文件中),要么存储由时态数据分区.此外,一些非常大的数据库可以使用 par.txt (文件)进一步分区.

这些存储策略(splayed,partitioned等)在搜索时非常有效或者从大表中访问数据.

历史数据库也可用于内部和外部报告目的,即用于分析.例如,假设我们想要从交易(或任何)表名称获取特定日期的IBM公司交易,我们需要编写如下的查询和减号;

thisday: 2014.10.12

select from trade where date = thisday, sym =`ibm

注意 : 一旦我们对 q 语言进行了概述,我们将编写所有这些查询.