有过百万级数据库搜索设计、优化的进来.具有挑战性

最近在做接触一个海量数据存储与搜索的项目.应用和CSDN的论坛相似.

以下我用实例+场景说明吧.这样直观些.
我是如下设计数据库.
1.数据库采用mysql或SqlServer

主贴表如下
create table Posts
(
  id VARCHAR2(18) not null,
  author VARCHAR2(40), --作者
  posttime datetime, --提交时间
  contents VARCHAR2(4000), --发贴内容
  modifytime datetime, --修改时间
  status int
)
在posttime,contents,author,id这些个字段上建立索引


跟贴回复表如下:
create table Replies
(
  id VARCHAR2(18) not null,
  postid VARCHAR2(18), --主贴id
  author VARCHAR2(40), --作者
  posttime datetime, --提交时间
  contents VARCHAR2(4000), --发贴内容
  modifytime datetime, --修改时间
  orders int, --楼层
  status int
)
在postid,posttime,contents,author,id这些个字段上建立索引


问题1.我是把主贴表和回复表分开设计,这样设计是否合理.有朋友说可以把这二张表合二为一.
但是我考虑数据量以后会很大.日积月累.以后每天至少会有产生3000个贴子至少.

问题2.这二张表的contents字段都是存储大量文本.和CSDN发贴填的内容一样.有可能还是rich文本内容.
.这里是用text存储还是以varchar2来存储?而且是不是要进行索引

问题3.索引我这样建是否合理?有朋友说要索引太多.反而会影响性能.


问题4.搜索.这个是个头痛的问题.搜索的场景和使用CSDN根据内容搜索贴子是一样的..而且不能加时间
来限制贴子内容.如一个用户输入"海量数据存储",则要将这二张表中的contents字段中有这个相似词的贴子
或回复内容全部检索出来.分页显示.

作者: jxydhzw   发布时间: 2011-06-14

引用问题1.我是把主贴表和回复表分开设计,这样设计是否合理.有朋友说可以把这二张表合二为一.
合理。分开。

引用问题2.这二张表的contents字段都是存储大量文本.和CSDN发贴填的内容一样.有可能还是rich文本内容.
MYSQL不存在VARCHAR2的区别,但VARCHAR是有最大限制的。所以用TEXT


引用问题3.索引我这样建是否合理?有朋友说要索引太多.反而会影响性能.
要看你的SELECT语句是什么,才能知道你的索引应该是什么。

引用问题4.搜索.这个是个头痛的问题.搜索的场景和使用CSDN
这个没办法,是全表扫描。 或者你可以添加全文索引。

作者: ACMAIN_CHM   发布时间: 2011-06-14