sisdb是一个完全开源的使用ANSI C语言编写、支持本地文件、网络、内存、数据可持久化的时序数据库;
主要应用于有价证券市场行情采集、因子数据存取、主要优势在处理大吞吐量的时序结构化数据;
主要具备部署简单、低延迟、查询数据格式丰富、多数据表流式回放等特点;
- 在现有的数据库中,主流的关系数据库因为吞吐量的原因无法满足高速大量的数据写入,即便是现在最流行的mongodb,当发生随机写入时效率也会大幅度降低;而作为吞吐量足够的内存数据库redis,但是其所提供的数据结构却并未针对有价证券体系,和普通的文件存储解决方案相比并没有什么优势;
- 生产环境和开发环境对数据格式要求的不同,对于开发者来说最好的情况是开发阶段用json格式做数据交互;进入生产环境使用压缩(且加密)的二进制数据流;这样即保证了开发的效率,同时可以平滑切换到安全可靠的生产环境;
- 越来越多的跨平台开发需求,使得目前跨系统的前端通常以WEB应用为主;sisdb直接提供了websocket标准通讯协议来提供数据支持,使得针对跨平台的客户端数据支持有先天的优势;
- sisdb 是专门为有价证券体系开发的一款高性能、安全、便捷的时序结构化数据库;sisdb针对有价证券的行情和交易数据进行优化存取,不仅支持二进制结构化数据流,而且还支持 json、array、csv 数据格式的输入和输出,便于用户分析数据;
- sisdb提供插件式功能扩展,便于二次开发,很方便的扩展功能,并且支持python的插件开发;
采用websocket协议格式,可以方便的为Web前端提供数据支持;
二进制数据格式;主要指结构化数据、压缩数据;
字符串数据格式;主要包括JSON格式、数据格式、CSV格式
存储任意键值数据,
主要支持 订阅和发布数据,
全部数据都在内存,记录网络log,便于历史数据备份回放;
主要存储结构化数据,数据类型为结构化数据,日期型的数据按年储存,其他的数据按天存储,数据支持增删插;
支持单条任意格式数据、支持列表任意格式数据;
按用户读取热度加载部分数据到内存;
这种数据内存加载方式的好处是,可以避免数据写入后没有读者,而浪费内存资源;
仅存储结构化数据,数据类型为结构化数据,按天存储到不同目录下,数据只支持增量写入模式;内存仅保留当日的数据,当日数据结束后就转存到磁盘中;
主要用于数据分发和传递,不保存历史数据,发送成功即销毁;
git clone https://github.com/seerline/sisdb.git
cd sisdb/bin
make
./sisdb -f sisdb-server.conf
> [db].show [subject]
列出[db]数据集合中的所有数据表和基本信息
> [db].get [subject].[sdb] [command]
[db] 表示从哪个数据集合分发的指令
[subject] 表示取哪只股票数据
[sdb] 表示取哪种数据格式
[command] 可有可无,由command定义数据范围和字段范围
command为json命令
sisdb.get sh.info {"format":"json"}
> [db].set [subject].sdb [data]
以json格式传输数据 可以是{},也可以是 []
[db] 表示从哪个数据集合分发的指令 [subject] 表示取哪只股票数据,必须有明确的代码 [sdb] 表示取哪种数据格式 [data] 表示跟的数据,
bin - 输出文件、配置文件等
src - 源码
api - c 语言的数据库调用接口
client - 客户端访问数据库的例子
test - 单元测试
workers - 所有的插件目录
data - 默认数据文件存放位置(运行期目录)
sisdb.server.conf -- 作为独立服务时使用的配置文件 主要配置文件 详见配置文件中说明
字段名 | 数据类型 | 长度 | 数量 | 小数点 | 字段约束 |
---|---|---|---|---|---|
字符串 | 参考数据类型定义 | 字段长度 | 默认为1 | 默认为0 | I 为索引 O 为唯一 |
数据类型标志 | 类型说明 | 字节说明 | 备注 |
---|---|---|---|
T | 毫秒 | 8 | 1630906080840 |
S | 秒 | 4、8 | 1630906080 |
M | 分钟 | 4 | 27181768 |
D | 天 | 4 | 20100101 |
I | 整数 | 1、2、4、8 | -1234 |
U | 无符号整数 | 1、2、4、8 | 1234 |
C | 字符型 | 1..N | SH600600 |
F | 浮点数 | 4、8 | 1234.56 |
state forkstatus <<fork>>
state joinstatus <<join>>
state stopstatus <<end>>
[*] --> websocket
websocket --> server
server --> forkstatus
forkstatus --> sisdb
forkstatus --> memdb
forkstatus --> snodb
forkstatus --> ...
sisdb --> joinstatus
memdb --> joinstatus
snodb --> joinstatus
... --> joinstatus
joinstatus --> client
client --> stopstatus