Redis: 行情数据库键值设计

Published
举例而言,其中一条记录(虚拟)

        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” =>

             另外,数据中应考虑不同类类型的数据,可能具有不同的特征,如 股票:复权因子,期货:未平仓合约量 。