有过百万级数据库搜索设计、优化的进来.具有挑战性
最近在做接触一个海量数据存储与搜索的项目.应用和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字段中有这个相似词的贴子
或回复内容全部检索出来.分页显示.
以下我用实例+场景说明吧.这样直观些.
我是如下设计数据库.
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