中小应用关系型数据库设计基本思路,个人见解,欢迎指正。
对于数据增长不大的A表,可以设计成一个表
A表
id(int)
content(varchar 5000)
audit_time(datetime)
user_id(int)
1
外面下雨了
2014-08-31 00:10:12
1324
2
这是一个不错的主意
2014-08-31 00:12:12
2014
抽取大字段到另一个表中
对于数据增长比较大的A表,抽取出比较大的content字段,单独放入另一张B表中,从A表中移除该content字段;
B表,把content字段抽取到这个表中,减小A表的大小:
id(int)
a_id(int)
content(varchar 5000)
1
1
外面下雨了
2
2
这是一个不错的主意
对主表进行分表
如果不用根据这张A表进行复杂的排序查询,只需要使用ID进行查询,则可以直接把这张A表进行分表;
对A表分表之后,如果需要进行audit_time字段的排序查询,则可以把该audit_time字段抽取到另外的C表中,使用A该表的主键进行关联,这样按照audit_time字段排序查询的时候,直接从C表查找到a_id,然后根据a_id从A表获取完整的记录;
C表,这个时候对A表进行分表,把所有的A表记录都存放到C表中:
id(int)
a_id(int)
audit_time(datetime)
1
1
2014-08-31 00:10:12
2
2
2014-08-31 00:12:12
给主表建立一些字段的关联表,对关联表进行分表,并使用分表进行查询,加快查询速度
如果A表不适合分表,但是有些需求需要查找user_id字段值为1324的所有记录,则可以把user_id字段放入另一个D表中,对这张D表进行分表(可以对user_id 取模进行分表,如user_id为12,则12%10 = 2 则可以把该记录存入D表的第三张分表中),这样也可以加快根据user_id字段查找记录时的速度了。
D表,直接从D表查找符合user_id值的记录:
id
a_id
user_id
1
1
1324
2
2
2014
另外,可以适当的在分表中增加冗余字段,减少表之间的关联查询,从而提高性能。
以上是几种常见的场景,具体的分表策略还得根据实际的业务逻辑进行设计。
另外,为了减少数据库的压力,必要的时候,添加对象缓存和页面缓存,对于改动或增加比较频繁的数据,则可以考虑使用如redis之类的内存数据库