1个不稳定版本

0.6.1 2023年6月25日
0.6.0 2023年6月25日

#1567数据库接口

MIT 协议

6MB
8K SLoC

Rust 6.5K SLoC // 0.1% comments TypeScript 570 SLoC // 0.0% comments JavaScript 340 SLoC // 0.1% comments Python 300 SLoC // 0.2% comments Go 186 SLoC // 0.3% comments

SeismicDB

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

crate docs.rs crate.io
seismicdb doc.rs crate.io
sdb-core doc.rs crate.io
sdb-server-core doc.rs crate.io
sdb-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 trait的任何缓冲区配合使用。

要求

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: 重构为异步

依赖项

~21–33MB
~519K SLoC