Redis: 为行情数据库设计键值
如果说用传统关系数据库如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: 为行情数据库设计键值相关推荐
- 从零开始设计键值数据库(KEY-VALUE STORE)
本文主要参考 System Design Interview: An Insider's Guide(CHAPTER 6) 键值存储(key-value store),也被称为键值数据库(key-va ...
- php使用redis生成自增序列号码,Redis使用Eval多个键值自增的操作实例
在PHP上使用Redis 给多个键值进行自增,示例如下: $set['money'] = $this->redis->hIncrByFloat($key, $hour .'_money', ...
- 浅谈redis数据库的键值设计
丰富的数据结构使得redis的设计非常的有趣.不像关系型数据库那样,DEV和DBA需要深度沟通,review每行sql语句,也不像memcached那样,不需要DBA的参与.redis的DBA需要熟悉 ...
- 05_NoSQL数据库之Redis数据库:Redis的常用命令,键值相关命令和服务器相关命令
Redis常用命令 Redis提供了丰富的命令对数据库和各种数据库类型进行操作,这些命令可以再Linux终端使用. 键值相关命令: Keys:返回满足给定pattern的所有key 用表达式*表 ...
- redis nosql_Redis教程:NoSQL键值存储
redis nosql 课程大纲 Redis是使用ANSI C编写的,具有可选持久性的开源,网络化,内存中键值数据存储.根据DB-Engines.com的月度排名,Redis是最受欢迎的键值存储. 其 ...
- mysql数据库键值对_关于数据库存储键值对的问题?
目前的需求的是:客户可自定义Grid的表头顺序,对表头进行拖拽和排序,并且要根据当前用户的配置保存.现在系统的表头显示是根据后台的配置配置顺序显示,如:table:字段名/表头名排序... 目前的需求 ...
- java redis 过期_Redis中的键值过期操作
1.过期设置 Redis 中设置过期时间主要通过以下四种方式: expire key seconds:设置 key 在 n 秒后过期: pexpire key milliseconds:设置 key ...
- 数据库设计--名值模式(转)
名值模式: 通常用来描述在系统设计阶段不能完全确定属性的对象,这些对象的属性在系统运行时会有很大的变更,或者是多个对象之间的属性存在很大的差异. 举例如下(注:这个例子已经作了相当程度的简化,仅仅是用 ...
- Redis在电影票系统的设计与实现(Redis键值对设计)
[辰兮要努力]:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行! 博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端.后台.数据 ...
- redis 关系数据库怎么转换 和_redis数据库设计(转)
阅读目录 redis是什么 redis就是一个存储key-value键值对的仓库,如何使用redis在于如何理解你需要设计的系统的E-R的模型,然后合理的规划redis的数据库结构 场景 我举一个简单 ...
最新文章
- getLocationInWindow getLocationOnScreen getLeft , getTop, getBottom,getRight
- C#.NET 中的类型转换
- ES6语法~解构赋值、箭头函数、class类继承及属性方法、map、set、symbol、rest、new.target、 Object.entries......
- 需要我们了解的SQL Server阻塞原因与解决方法 - sym_cn
- winform界面闪退
- 一致性哈希解决的问题
- java hs err pid_JAVA 奔溃 生成hs_err_pid****的文件,求大神看看
- linux如何运行python_[TimLinux] Python如何运行程序
- Unity3d gameObject
- MATLAB如何修改打开时的默认文件夹或默认路径
- 第二次 HDOJ 1003
- 撩课-Web大前端每天5道面试题-Day4
- 2.2.2-6-2 补码位乘法(Booth算法)
- 新学习之 jQuery-boxy
- 带宽在计算机系统中的意义,带宽是什么意思?
- 如何在Word,excel 中打钩和打叉?
- 天啦撸!打印日志竟然只晓得 Log4j?
- 基于Vue的省市区三联的地区选择器V-Distpicker的使用及踏过的坑...
- springBoot经验积累
- Qt 调用ftd2x API上位机踩坑指南