举例而言,其中一条记录(虚拟)
code :600036.SH Date :2014-10-09 DateTime: 930 Open: 9.60 High:10.08 Close:10.02 Low :9.54 Volume: 123456 Amount :78964531 Factor: 5.123
另外,成份股的指数权属作为另外一张表而存在,不放在这里,否则太大,也浪费空间。
如果以内存数据库Redis来设计key-value,相对的key 就会比较长,但value比较简单。
因为key的唯一性,
比如,同样以上面的记录而言,可能就要设计一个唯一的KEY:
key1: 600036.SH_1min:2014-10-09:0930:Open => value1 :9.60
key2: 600036.SH_1min:2014-10-09:0930:High => value 2:10.08
key3: 600036.SH_1min:2014-10-09:0930:Close => value3 :10.02
key4: 600036.SH_1min:2014-10-09:0930:Low => value4 :9.54
......
也就是说
set 600036.SH_1min:2014-10-09:0930:Open 9.60
set 600036.SH_1min:2014-10-09:0930:High 10.08
set 600036.SH_1min:2014-10-09:0930:Close 10.02
set 600036.SH_1min:2014-10-09:0930:Low 9.54
.......
这样,就可以建立一系列的KEY-VALUE结构的非结构化数据了。
下面,针对历史行情数据库中,典型的日度数据,N分钟数据,TICK数据,我们要进行一个整体上的数据库设计。
(1) 类型的设计
我个人认为,用hash的方式来设历史行情库,可能会更好。
(2) KEY 的设计
一般而言,而行情数据库的KEY要包含代码名称(比如,600036.SH).但是,因为分钟数据和日度数据的粒度相差较大,如何统一考虑?
其中,不同类型的数据的文件名应有唯一性。
A、分钟数据:
文件变量名:"600036.sh_1min“,假设有6年的数据,6*250*270 约40万条左右的数据记录源(注意KEY个数还要乘以记录的字段数,下同。)
KEY : “600036.sh_1min_2014-10-09_930” => 开盘价,收盘价,最高价,最低价,成交量,成交金额,复权因子....
B、TICK数据:
文件变量名:”600036.sh_Tick_2014-10-09“
# 把每天的TICK,有数千条(股票)甚至数万条(期货)放到一个变量中。
KEY: ”600036.sh_Tick_2014-10-09 _930_01.001“ =>
C、日度数据:
文件变量名:”600036.sh_1day“,假设6年数据,此文件大约会储存 6*250 =1500条左右数据源。
KEY: “ 600036.sh_1day_2014-10-09” =>
另外,数据中应考虑不同类类型的数据,可能具有不同的特征,如 股票:复权因子,期货:未平仓合约量 。
Redis: 行情数据库键值设计
PublishedCreated: 2018年11月30日星期五 13:54:51 views(1843)