首页 > 代码库 > 列式存储设计实战

列式存储设计实战

背景:

      开发个学生系统,数据库设计。

设计实施:

传统数据库学生表行设计

学号

姓名

性别

年龄

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