2个版本
0.5.1 | 2020年2月8日 |
---|---|
0.5.0 | 2020年2月8日 |
#9 in #datastore
22 每月下载量
在 tectonicdb 中使用
155KB
4K SLoC
tectonicdb
crate | docs.rs | crate.io |
---|---|---|
tectonicdb | ||
tdb-core | ||
tdb-server-core | ||
tdb-cli |
tectonicdb是一个快速、高度压缩的独立数据库和流式传输协议,用于订单簿的tick数据。
为什么
-
使用简单高效的二进制文件格式:密集tick格式(DTF)
-
存储订单簿tick数据元组,形状如下:
(timestamp, seq, is_trade, is_bid, price, size)
。 -
按时间戳+序列排序
-
每个订单簿事件12字节
-
每秒每线程600,000个插入
安装
安装tectonicdb有几种方法。
- 二进制文件
二进制文件可供下载。确保将二进制文件的路径添加到您的PATH中。目前仅提供Linux x86_64的构建版本。
- Crates
cargo install tectonicdb
此命令将从crates.io下载tdb
、tdb-server
、dtftools
二进制文件并在本地构建。
- 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 相同。
此外,您可以直接使用 INFO
和 PERF
命令查询使用信息
-
INFO
报告内存和磁盘中的当前 tick 计数。 -
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