如果说用传统关系数据库如MSSQL,MYSQL,PGSQL来设计一个行情数据库,除表名外,就是列字段了。

比如,表名:600036.SH_1min,  (这里假定每个个股设计一张表,避免把所有的个股放在一张表中,导致数据以亿计,查询效率太低)

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

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

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

(3)性能比较

数据如何设计,关键要看性能和维度容易程度。这块需要后续实证了。

Redis: 为行情数据库设计键值相关推荐

  1. 从零开始设计键值数据库(KEY-VALUE STORE)

    本文主要参考 System Design Interview: An Insider's Guide(CHAPTER 6) 键值存储(key-value store),也被称为键值数据库(key-va ...

  2. php使用redis生成自增序列号码,Redis使用Eval多个键值自增的操作实例

    在PHP上使用Redis 给多个键值进行自增,示例如下: $set['money'] = $this->redis->hIncrByFloat($key, $hour .'_money', ...

  3. 浅谈redis数据库的键值设计

    丰富的数据结构使得redis的设计非常的有趣.不像关系型数据库那样,DEV和DBA需要深度沟通,review每行sql语句,也不像memcached那样,不需要DBA的参与.redis的DBA需要熟悉 ...

  4. 05_NoSQL数据库之Redis数据库:Redis的常用命令,键值相关命令和服务器相关命令

     Redis常用命令 Redis提供了丰富的命令对数据库和各种数据库类型进行操作,这些命令可以再Linux终端使用. 键值相关命令: Keys:返回满足给定pattern的所有key 用表达式*表 ...

  5. redis nosql_Redis教程:NoSQL键值存储

    redis nosql 课程大纲 Redis是使用ANSI C编写的,具有可选持久性的开源,网络化,内存中键值数据存储.根据DB-Engines.com的月度排名,Redis是最受欢迎的键值存储. 其 ...

  6. mysql数据库键值对_关于数据库存储键值对的问题?

    目前的需求的是:客户可自定义Grid的表头顺序,对表头进行拖拽和排序,并且要根据当前用户的配置保存.现在系统的表头显示是根据后台的配置配置顺序显示,如:table:字段名/表头名排序... 目前的需求 ...

  7. java redis 过期_Redis中的键值过期操作

    1.过期设置 Redis 中设置过期时间主要通过以下四种方式: expire key seconds:设置 key 在 n 秒后过期: pexpire key milliseconds:设置 key ...

  8. 数据库设计--名值模式(转)

    名值模式: 通常用来描述在系统设计阶段不能完全确定属性的对象,这些对象的属性在系统运行时会有很大的变更,或者是多个对象之间的属性存在很大的差异. 举例如下(注:这个例子已经作了相当程度的简化,仅仅是用 ...

  9. Redis在电影票系统的设计与实现(Redis键值对设计)

    [辰兮要努力]:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行! 博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端.后台.数据 ...

  10. redis 关系数据库怎么转换 和_redis数据库设计(转)

    阅读目录 redis是什么 redis就是一个存储key-value键值对的仓库,如何使用redis在于如何理解你需要设计的系统的E-R的模型,然后合理的规划redis的数据库结构 场景 我举一个简单 ...

最新文章

  1. getLocationInWindow getLocationOnScreen getLeft , getTop, getBottom,getRight
  2. C#.NET 中的类型转换
  3. ES6语法~解构赋值、箭头函数、class类继承及属性方法、map、set、symbol、rest、new.target、 Object.entries......
  4. 需要我们了解的SQL Server阻塞原因与解决方法 - sym_cn
  5. winform界面闪退
  6. 一致性哈希解决的问题
  7. java hs err pid_JAVA 奔溃 生成hs_err_pid****的文件,求大神看看
  8. linux如何运行python_[TimLinux] Python如何运行程序
  9. Unity3d gameObject
  10. MATLAB如何修改打开时的默认文件夹或默认路径
  11. 第二次 HDOJ 1003
  12. 撩课-Web大前端每天5道面试题-Day4
  13. 2.2.2-6-2 补码位乘法(Booth算法)
  14. 新学习之 jQuery-boxy
  15. 带宽在计算机系统中的意义,带宽是什么意思?
  16. 如何在Word,excel 中打钩和打叉?
  17. 天啦撸!打印日志竟然只晓得 Log4j?
  18. 基于Vue的省市区三联的地区选择器V-Distpicker的使用及踏过的坑...
  19. springBoot经验积累
  20. Qt 调用ftd2x API上位机踩坑指南

热门文章

  1. Java补缺补漏—基本数据类型与引用数据类型
  2. shared_ptr的简单实现
  3. SDN驱动云数据中心的发展
  4. Storm Control
  5. JSON与JAVA的数据转换
  6. 体验Windows server 2012上安装SQL 2012
  7. 628和822大K站:每个站长挥之不去的阴影
  8. ubuntu安装ROBOWARE
  9. Jeecg-Boot前后端分离版
  10. 点菜单项在面板中打开并判断是否打开