1 个不稳定版本

0.6.0 2023年6月25日

#1180数据库接口


seismicdb 中使用

MIT 许可证

215KB
5.5K SLoC

SeismicDB

Rust 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

SeismicDB 是一个快速、高度压缩的独立数据库和流协议,用于订单簿的跳动数据。

SeismicDB 是从已停止但杰出的 TectonicDB 分叉而来。 https://github.com/0b01/tectonicdb

原因

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

  • 存储订单簿跳动数据元组:(时间戳, 序列, 是否交易, 是否投标, 价格, 大小)

  • 按时间戳 + 序列排序

  • 每个订单簿事件 12 字节

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

安装

安装 seismicdb 有几种方法。

  1. 二进制文件

二进制文件可供 下载。请确保将二进制文件的路径放入您的 PATH 中。目前仅支持 Linux x86_64 构建。

  1. Crates
cargo install seismicdb

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

  1. 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相同。

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

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

  2. 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