转自http://www.ismole.net/viewthread.php?tid=801&highlight=
单用户BLOG的数据库设计方案 主体结构
单用户博客数据量如何
Typecho的定位是单用户blog系统,在我们设计它的数据库之前有必要对个人博客系统的负载情况做一些评估.我有一个朋友,是一个勤奋的blogger,alexa排名在十万以上,日IP在10w左右.他选择了wordpress作为主要系统,我们知道wordpress系统的一个主页乐观的估计也有20余次查询.但这依然无法阻挡这款程序的流行,在去年对全球top10blogger所使用的系统调查中,wordpress比其他系统有着明显的优势.很显然,wordpress的负载是可控的.
当我们在设计一个单用户blog系统时,我们要时刻把单用户这三个字放在心上.单用户意味着数据的查询是很集中的,当一个用户页面的访问量比较小时,他几乎感觉不到这多出的几次查询带来多少延迟.而当访问量比较大时,他必然有实力去升级他的系统,而由于单用户系统的查询比较集中,我们可以通过部署文件缓存或者内存对象缓存来达到减轻数据库压力的目的,或者增加数据库数量来达到平滑的系统扩容.因此单用户系统设计重点在于灵活性和结构化,当我们集中地暴露系统瓶颈,从另一个方面也可以集中精力去解决它.
5张表的设计让我们列举一下一个blog系统需要哪些元素,这样也可以让我们更好地设计数据库表.我们需要文章,评论,分类,链接,用户,现在的blog系统还需要文件,标签,链接分类,多重分类,如果我们考虑到系统的灵活性,我们还需要将所有的可配置选项放到一个表中,类似于wordpress的options表.
让我们来清点一下这些表.
内容与内容,6张表的设计如果你仔细分析一下上面的设计,你会发现一个隐藏的问题,那就是评论表的定义.显然评论表不可能是项目表,那么他只可能是内容表,但内容与内容之间的关系是我们以上设计中所没有定义的.观察评论与内容的关系
梳理我们的设计让我们来看看内容表可以扩展出来的类型
表以及字段命名考虑到标准化和国际化的需要,我们在表以及字段设置上应该尽量使用标准名称.而由于使用了一对多的关系映射,在可以预见的地方内容与项目之间都不可能使用联合查询,而是用多次联动查询,来取出多行关联数据.所以内容表与项目表的字段是可以重名的(在联合查询中,重名字段会被覆盖).以下是我对各数据表的命名
contents表
relationships表
metas表
comments表
options表
users表
单用户BLOG的数据库设计方案 主体结构
单用户博客数据量如何
Typecho的定位是单用户blog系统,在我们设计它的数据库之前有必要对个人博客系统的负载情况做一些评估.我有一个朋友,是一个勤奋的blogger,alexa排名在十万以上,日IP在10w左右.他选择了wordpress作为主要系统,我们知道wordpress系统的一个主页乐观的估计也有20余次查询.但这依然无法阻挡这款程序的流行,在去年对全球top10blogger所使用的系统调查中,wordpress比其他系统有着明显的优势.很显然,wordpress的负载是可控的.
当我们在设计一个单用户blog系统时,我们要时刻把单用户这三个字放在心上.单用户意味着数据的查询是很集中的,当一个用户页面的访问量比较小时,他几乎感觉不到这多出的几次查询带来多少延迟.而当访问量比较大时,他必然有实力去升级他的系统,而由于单用户系统的查询比较集中,我们可以通过部署文件缓存或者内存对象缓存来达到减轻数据库压力的目的,或者增加数据库数量来达到平滑的系统扩容.因此单用户系统设计重点在于灵活性和结构化,当我们集中地暴露系统瓶颈,从另一个方面也可以集中精力去解决它.
5张表的设计让我们列举一下一个blog系统需要哪些元素,这样也可以让我们更好地设计数据库表.我们需要文章,评论,分类,链接,用户,现在的blog系统还需要文件,标签,链接分类,多重分类,如果我们考虑到系统的灵活性,我们还需要将所有的可配置选项放到一个表中,类似于wordpress的options表.
让我们来清点一下这些表.
- 文章表
- 评论表
- 文章分类表
- 标签表
- 链接表
- 链接分类表
- 文章与分类映射表(一对多)
- 文章与标签映射表(一对多)
- 配置表
- 用户表
- 文件表
- 内容表
- 关系表
- 项目表
- 配置表
- 用户表
内容与内容,6张表的设计如果你仔细分析一下上面的设计,你会发现一个隐藏的问题,那就是评论表的定义.显然评论表不可能是项目表,那么他只可能是内容表,但内容与内容之间的关系是我们以上设计中所没有定义的.观察评论与内容的关系
- 评论从属于内容,无法单独存在
- 评论与内容是多对一的关系,且一条评论只能对应于一个内容
- 评论的数量往往比较大,对于访问量比较大的blog,其单篇文章的评论往往要达到上百篇.
- 内容表
- 关系表
- 项目表
- 评论表
- 配置表
- 用户表
梳理我们的设计让我们来看看内容表可以扩展出来的类型
- post(文章)
- draft(草稿)
- page(页面)
- link(链接)
- attachment(文件)
- category(分类)
- tag(标签)
- link_category(链接分类)
表以及字段命名考虑到标准化和国际化的需要,我们在表以及字段设置上应该尽量使用标准名称.而由于使用了一对多的关系映射,在可以预见的地方内容与项目之间都不可能使用联合查询,而是用多次联动查询,来取出多行关联数据.所以内容表与项目表的字段是可以重名的(在联合查询中,重名字段会被覆盖).以下是我对各数据表的命名
- 内容表 - contents
- 关系表 - relationships
- 项目表 - metas (meta的意思为关于什么的什么)
- 评论表 - comments
- 配置表 - options
- 用户表 - users
contents表
relationships表
metas表
comments表
options表
users表