现在的软件都建立在数据的基础上,为了方便处理大量的数据可以利用关系型数据库,比如Oracle,Mysql,它们都提供了:
- 事务:于是并发对数据处理变的容易
- 分表:只需要改一个地方,维护数据一致性,避免冗余
- 标准SQL:便捷的对大量数据执行处理
- 索引:内部为BTree查询非常高效
虽然有很多优点,但数据库也有其能力极限,糟糕的设计不只是增加代码复杂度,在数据量特别大的时候,有的查询需要花费数分钟甚至更久,毫无用户体验,而一旦数据库设计好,但代码没进行规范分层导致和数据库绑死,想再改数据库几乎不再可能,如何设计数据库,利用数据库的优点,通过估算来衡量不同的设计,这篇文章将在一份样本数据的基础上进行不同的水平分表,然后分析各自的优缺点
数据
如下两份数据
record | type | name | item1 | item2 | item3 |
---|---|---|---|---|---|
record1 | type1 | name1 | 1.1 | 2.1 | 3.1 |
record2 | type2 | name1 | 1.2 | 2.2 | 3.2 |
record | type | name | item2 | item3 | item4 |
---|---|---|---|---|---|
record3 | type1 | name3 | 2.3 | 3.3 | 4.3 |
record4 | type2 | name4 | 2.4 | 3.4 | 4.4 |
从上面可以看到不同record有少数固定的共同字段比如type,name,还有些字段并不固定比如item,而且这里假设item可能有几十万之多,记为M,上面表