K线历史数据存储方案分享

一年以前,我有幸在一家数字货币培训公司上班,工作内容就是通过“火币”、“币安”、“OKEx”这些知名交易所提供的免费api接口获得数据,并把数据存储起来,然后供前端K线页面展示。现今,我想分享一下当初的存储这些K线历史数据的方案。

1、首先是交易对的存储,我把他们放在一个名为 "kline" 的数据库中,然后再按照交易所创建各自的交易对信息表,“symbol_hb”、“symbol_bian”、“symbol_okex”。

2、K线的历史数据,我把他们都放入mongodb中,同样,每个交易所都创建各自的mongodb数据库,“kline_hb”、“kline_bian”、“kline_okex”;

3、K线的历史数据有 1min/3min/5min/10min/15min/30min/1hour/2hour/4hour/6hour/12hour/1day/3day/1week/1month/1year。于是,我根据周期创建它们各自的mongodb 集合:

#K线历史数据mongodb集合
#1min集合64个
db.createCollection("min1_0");
db.createCollection("min1_63");

#3min集合32个
db.createCollection("min3_0");
db.createCollection("min3_31");

#5min集合32个
db.createCollection("min5_0");
db.createCollection("min5_31");

#10min集合16个
db.createCollection("min10_0");
db.createCollection("min10_15");

#15min集合16个
db.createCollection("min15_0");
db.createCollection("min15_15");

#30min集合8个
db.createCollection("min130_0");
db.createCollection("min130_7");

#1hour集合8个
db.createCollection("hour1_0");
db.createCollection("hour1_7");

#2hour集合4个
db.createCollection("hour2_0");
db.createCollection("hour2_3");

#4hour集合4个
db.createCollection("hour4_0");
db.createCollection("hour4_3");

#6hour集合1个
db.createCollection("hour6_0");

#12hour集合1个
db.createCollection("hour12_0");

#1day集合1个
db.createCollection("day1_0");

#3day集合1个
db.createCollection("day3_0");

#1week集合1个
db.createCollection("week1_0");

#1month集合1个
db.createCollection("month1_0");

#1year集合1个
db.createCollection("year1_0");

集合索引:交易对ID与开盘时间戳组合唯一索引
集合分片方式:交易对ID 作为片键
使用副本集架构,一主一从一仲裁
分片集群,详见官网:https://www.mongodb.com/docs/manual/tutorial/deploy-shard-cluster/

以上为什么创建这么多集合,只要是为了提高接口的响应速度,数据的准确性;另外,K线历史数据不是采集回来就是准确的,每分钟采集回来的同一个开盘时间的收盘价、成交额有可能是不一致的,所以数据需要随时更新,故此,没有使用时序数据库。

值得一提的是:我处理的K线数据存储使我清楚mongodb组合唯一索引的重要性、副本集群部署的必要性。

K线的热数据缓存方案,即时价格(websocket)消息广播,有空再续。

  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值