1 个不稳定版本
0.6.0 | 2023年6月25日 |
---|
#1180 在 数据库接口
在 seismicdb 中使用
215KB
5.5K SLoC
SeismicDB
crate | docs.rs | crate.io |
---|---|---|
tectonicdb | ||
tdb-core | ||
tdb-server-core | ||
tdb-cli |
SeismicDB 是一个快速、高度压缩的独立数据库和流协议,用于订单簿的跳动数据。
SeismicDB 是从已停止但杰出的 TectonicDB 分叉而来。 https://github.com/0b01/tectonicdb
原因
-
使用简单高效二进制文件格式:密集跳动格式(DTF)
-
存储订单簿跳动数据元组:
(时间戳, 序列, 是否交易, 是否投标, 价格, 大小)
。 -
按时间戳 + 序列排序
-
每个订单簿事件 12 字节
-
每秒每线程 600,000 个插入
安装
安装 seismicdb 有几种方法。
- 二进制文件
二进制文件可供 下载。请确保将二进制文件的路径放入您的 PATH 中。目前仅支持 Linux x86_64 构建。
- Crates
cargo install seismicdb
此命令将从 crates.io 下载 sdb
、sdb-server
、dtftools
二进制文件并在本地构建。
- GitHub
要贡献,您需要在您的本地机器上拥有源代码副本。
git clone https://github.com/alice-comfy/SeismicDB
cd seismicdb
cargo build --release
cargo run --release sdb-server
二进制文件可以在 target/release
下找到。
如何使用
设置非常简单。
./sdb-server --help
例如
./sdb-server -vv -a -i 10000
# run the server on INFO verbosity
# turn on autoflush for every 10000 inserts per orderbook
配置
要配置 Google Cloud Storage 和数据收集后端集成,使用以下环境变量
变量名称 | 默认值 | 描述 |
---|---|---|
SDB_HOST |
0.0.0.0 | 数据库将绑定的主机 |
SDB_PORT |
9001 | 数据库将监听的网络端口 |
SDB_DTF_FOLDER |
db | DTF 文件将存储的目录名称 |
SDB_AUTOFLUSH |
false | 如果 true ,记录的订单簿数据将自动在每 interval 插入时刷新到 DTF 文件。 |
SDB_FLUSH_INTERVAL |
1000 | 每 interval 插入,如果启用了 autoflush ,则将从内存将 DTF 文件写入磁盘。 |
SDB_GRANULARITY |
0 | 记录历史粒度级别 |
SDB_LOG_FILE_NAME |
sdb.log | 数据库的日志文件名称 |
SDB_Q_CAPACITY |
300 | 环形队列记录历史容量 |
客户端API
命令 | 描述 |
---|---|
帮助 | 打印帮助信息 |
PING | 响应PONG |
INFO | 返回关于表模式的信息 |
PERF | 返回随时间变化的条目答案计数 |
LOAD [orderbook] | 从磁盘将orderbook加载到内存 |
USE [orderbook] | 切换当前orderbook |
CREATE [orderbook] | 创建orderbook |
GET [n] FROM [orderbook] | 返回项目 |
GET [n] | 从当前orderbook返回n个项目 |
COUNT | 当前orderbook中项目的计数 |
COUNT ALL | 从所有orderbook返回总计数 |
CLEAR | 删除当前orderbook中的所有内容 |
CLEAR ALL | 从内存中删除所有内容 |
FLUSH | 将当前orderbook刷新到硬盘 |
FLUSHALL | 将内存中的所有内容刷新到磁盘 |
SUBSCRIBE [orderbook] | 订阅orderbook的更新 |
EXISTS [orderbook] | 检查orderbook是否存在 |
SUBSCRIBE [orderbook] | 订阅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
$ sdb --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计数历史,其粒度可以配置。
日志记录
默认的日志文件为sdb.log
。
测试
export RUST_TEST_THREADS=1
cargo test
必须按顺序运行测试,因为一些测试依赖于其他测试生成的dtf文件。
基准测试
sdb客户端包含基准测试模式。此命令将1M条记录插入sdb。
sdb -b 1000000
使用dtf文件
Seismic附带一个名为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.6.0: 第一个seismicDB分支版本发布。升级依赖项和rust版本到2021/最新版本。重新命名并在crates.io上发布新版本。
- 0.5.0: InfluxDB监控插件和改进的命令行参数
- 0.4.0: 基于迭代器的API用于处理DTF文件和各种质量改进
- 0.3.0: 重构为异步
依赖项
~12–26MB
~405K SLoC