2个版本

0.5.1 2020年2月8日
0.5.0 2020年2月8日

#9 in #datastore

22 每月下载量
tectonicdb 中使用

MIT 许可证

155KB
4K SLoC

tectonicdb

Build Status crate.io doc.rs Minimum Rust version Rust stable

crate docs.rs crate.io
tectonicdb doc.rs crate.io
tdb-core doc.rs crate.io
tdb-server-core doc.rs crate.io
tdb-cli doc.rs crate.io

tectonicdb是一个快速、高度压缩的独立数据库和流式传输协议,用于订单簿的tick数据。

为什么

  • 使用简单高效的二进制文件格式:密集tick格式(DTF)

  • 存储订单簿tick数据元组,形状如下:(timestamp, seq, is_trade, is_bid, price, size)

  • 按时间戳+序列排序

  • 每个订单簿事件12字节

  • 每秒每线程600,000个插入

安装

安装tectonicdb有几种方法。

  1. 二进制文件

二进制文件可供下载。确保将二进制文件的路径添加到您的PATH中。目前仅提供Linux x86_64的构建版本。

  1. Crates
cargo install tectonicdb

此命令将从crates.io下载tdbtdb-serverdtftools二进制文件并在本地构建。

  1. GitHub

要贡献,您需要在本地机器上拥有源代码副本。

git clone https://github.com/0b01/tectonicdb
cd tectonicdb
cargo build --release
cargo run --release tdb-server

二进制文件位于target/release下。

如何使用

设置非常简单。

./tdb-server --help

例如

./tdb-server -vv -a -i 10000
# run the server on INFO verbosity
# turn on autoflush for every 10000 inserts per orderbook

配置

要配置Google Cloud Storage和数据收集后端集成,以下环境变量被使用

变量名称 默认值 描述
TDB_HOST 0.0.0.0 数据库将绑定的主机
TDB_PORT 9001 数据库将监听的自定义端口
TDB_DTF_FOLDER db DTF文件将存储的目录名称
TDB_AUTOFLUSH false 如果设置为true,则记录的订单簿数据将在每interval插入后自动刷新到DTF文件。
TDB_FLUSH_INTERVAL 1000 每个 interval 插入时,如果启用 autoflush,DTF 文件将从内存写入磁盘。
TDB_GRANULARITY 0 记录历史粒度级别
TDB_LOG_FILE_NAME tdb.log 数据库日志文件的文件名
TDB_Q_CAPACITY 300 记录历史记录的循环队列容量

客户端API

命令 描述
HELP 打印帮助信息
PING 响应 PONG
INFO 返回关于表架构的信息
PERF 返回随时间变化的项目的 answercount
LOAD [orderbook] 从磁盘加载订单簿到内存
USE [orderbook] 切换当前订单簿
CREATE [orderbook] 创建订单簿
GET [n] FROM [orderbook] 返回项目
GET [n] 从当前订单簿返回 n 个项目
COUNT 当前订单簿中项目数量
COUNT ALL 返回所有订单簿的总数
CLEAR 删除当前订单簿中的所有内容
CLEAR ALL 删除内存中的所有内容
FLUSH 将当前订单簿刷新到 "Howdisk can"
FLUSHALL 将内存中的所有内容刷新到磁盘
SUBSCRIBE [orderbook] 订阅订单簿的更新
EXISTS [orderbook] 检查订单簿是否存在
SUBSCRIBE [orderbook] 订阅订单簿

数据命令

USE [dbname]
ADD [ts], [seq], [is_trade], [is_bid], [price], [size];
INSERT 1505177459.685, 139010, t, f, 0.0703620, 7.65064240; INTO dbname

监控

TectonicDB 通过定期向 InfluxDB 实例发送其使用信息来支持监控/警报

    --influx-db <influx_db>                        influxdb db
    --influx-host <influx_host>                    influxdb host
    --influx-log-interval <influx_log_interval>    influxdb log interval in seconds (default is 60)

具体示例:

...
$ influx
> CREATE DATABASE market_data;
> ^D
$ tdb --influx-db market_data --influx-host http://localhost:8086 --influx-log-interval 20
...

TectonicDB 将发送具有标签 ob={ORDERBOOK} 的值 disk={COUNT_DISK},size={COUNT_MEM}market_data 测量值,该值与 dbname 相同。

此外,您可以直接使用 INFOPERF 命令查询使用信息

  1. INFO 报告内存和磁盘中的当前 tick 计数。

  2. PERF 返回记录的 tick 计数历史,其粒度可以配置。

日志记录

默认的日志文件为 tdb.log

测试

export RUST_TEST_THREADS=1
cargo test

测试必须顺序运行,因为某些测试依赖于其他测试生成的 dtf 文件。

基准测试

tdb 客户端附带基准模式。此命令将 1M 条记录插入到 tdb 中。

tdb -b 1000000

使用 dtf 文件

Tectonic 附带一个命令行工具 dtfcat,用于检查文件元数据以及所有存储的事件到 JSON 或 CSV。

选项

USAGE:
    dtfcat [FLAGS] --input <INPUT>

FLAGS:
    -c, --csv         output csv
    -h, --help        Prints help information
    -m, --metadata    read only the metadata
    -V, --version     Prints version information

OPTIONS:
    -i, --input <INPUT>    file to read

作为库

可以在不同的应用程序中使用 Dense Tick Format 流式传输协议/文件格式。与实现 Write 特性的任何缓冲区配合良好。

要求

TectonicDB 是一个独立的服务。

  • Linux

  • macOS

语言绑定

  • TypeScript

  • Rust

  • Python

  • JavaScript

附加功能

  • 类似于 Cloud SQL 的使用统计信息

  • dtf 文件格式的命令行检查工具

  • 日志记录

  • 按时间戳查询

变更日志

  • 0.5.0: InfluxDB 监控插件和改进的命令行参数
  • 0.4.0: 基于 iterator 的处理 DTF 文件的 API 和各种质量改进
  • 0.3.0: 重构为异步

依赖项

~4.5–6MB
~94K SLoC