首页 > 代码库 > 列式存储设计实战
列式存储设计实战
背景:
开发个学生系统,数据库设计。
设计实施:
传统数据库学生表行设计
学号 | 姓名 | 性别 | 年龄 |
1 | 张三 | 男 | 16 |
2 | 李红 | 女 | 15 |
3 | 王五 | 男 | 16 |
当想扩展属性时,相对应的会增加字段。
学号 | 姓名 | 性别 | 年龄 | 住址 |
1 | 张三 | 男 | 16 | 河南 |
2 | 李红 | 女 | 15 | 湖北 |
3 | 王五 | 男 | 16 | 北京 |
实际开发中这样做的缺点:
1:属性字段向主表加,会导致列越来越多,增加表拆分成本。
2: 增加字段,程序中实体模型,SQL查询字段,DTO及文档数据模型都要跟着发生变化,增加成本。
3:查询单个字段,也需要查询整个行。增加Io消耗。
Ps:优点就不多说了。
怎么解决这个问题呢?其实很简单,只是一个思路的转变。
我们把一个对象==一条行记录,转化成列式存储。
学号 | 属性key | 值value |
1 | 姓名 | 张三 |
1 | 性别 | 男 |
1 | 年龄 | 16 |
1 | 住址 | 河南 |
.... | ..... | .... |
这样做就完美解决上面的问题了。数据量也会N倍增加。
题外话:
本文仅仅是思路,具体设计看需求,个人习惯。
索引字段不需要查询整行,查询需要行转列等等,这类问题不做讨论。
相关资料
1:列式数据库 http://zh.wikipedia.org/wiki/%E5%88%97%E5%BC%8F%E6%95%B0%E6%8D%AE%E5%BA%93
2:五大存储模型 http://www.csdn.net/article/2012-03-12/313041
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。