500万条记录,每个表有40个字段,总共15G数据如何做web上的全文检索和统计?

netcyb1977 2009-04-15 02:22:18
MS Sql server 2000的数据库,一共500万条记录,每个表有40个字段,总共15G数据。
现状:我对数据进行了分表处理,建立了一模一样的50个数据表,每个表大概10万条记录,并对ID进行了索引。剩下的就不知道从哪里下手了。
功能:
1 我要做全文检索,也就是随便输入一个关键词,可以在500万条记录中的40个字段里面进行查询,并返回全部结果。
这个功能要做在web上,提供浏览者使用,所以返回的时间控制在1秒以内。
2 还要做统计汇总功能,根据不同的条件,将检索后的结果进行统计,以排名,报表的形式进行统计输出。
这个功能也要求返回的时间控制在1秒以内。
问题:
1 本人没有做过这么大数据量的查询和统计,没有一点经验,所以对很多问题不是很明白。
2 首先在硬件上,对服务器应该有一定的要求吧?
3 对于编程语言上,选用asp还是php,还是.net比较合适呢?
4 我考虑将500万条记录全部输出成静态的html页面,然后再建立索引。如果这样,该如何建立索引,如何保证速度呢?
5 直接从数据库查询,然后输出,程序怎么判断这50个表,怎么选择这40个字段?
6 关于缓存问题,这种数据库形式的数据库检索和统计,怎么做缓存呢?一点头绪都没有。

也请各位做过的人提供范例或者可能的解决方法。
...全文
444 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
邻家小宝 2009-07-14
  • 打赏
  • 举报
回复
我觉得线程并发操作,不会对数据检索有着太大的性能上的优化。
分表,分词倒是可以优化不少的。仅是个人见解,不要扔砖头!!
先把网站记下,回去研究!
tellmey 2009-07-13
  • 打赏
  • 举报
回复
mark
nutian 2009-07-08
  • 打赏
  • 举报
回复
lucene确实有点慢,我测试建立索引,1分钟能建立10兆数据,
建立索引时cpu是100%
前面那位介绍sphinx的,150万条记录一两分钟就索引完毕,不知道这些记录
共有多少数据量?按照平均每条100字,那么有300M的数据,那么一分钟处理150M,
这么快!非常怀疑,莫非使用的是超强的计算机?
tianjiao85 2009-07-05
  • 打赏
  • 举报
回复
lucene绝对可以支持,
janbox 2009-06-15
  • 打赏
  • 举报
回复
用lucene,这个数据量没有什么问题
szqbzhou 2009-06-10
  • 打赏
  • 举报
回复
compass,或hibernate search
szqbzhou 2009-06-10
  • 打赏
  • 举报
回复
compass,或hibernate search
wangbi1988 2009-06-10
  • 打赏
  • 举报
回复
貌似量真的很大,觉得楼主是否可以考虑并发。在使用楼上大大们的方法同时,可以考虑添加并发操作。虽然会要求硬件,但时间是可以减少许多的吧。
tzm_tt 2009-05-27
  • 打赏
  • 举报
回复
lucene
todaylxp 2009-05-27
  • 打赏
  • 举报
回复
500万数据,觉得用数据库是可以支持的。
但要考虑你的功能需求。
如果用java;那用lucene
如果用c++;那用sphinx,xapian都可以
硬件的话,如果不考虑并发,对外做服务器的。一般高性能的PC就足以,最多加个SSD或者raid
zxh116116 2009-04-18
  • 打赏
  • 举报
回复
500条记录已经很少了,不过你的40个字段全部要那就纯扯淡了
shan168 2009-04-16
  • 打赏
  • 举报
回复
用lucene
netcyb1977 2009-04-16
  • 打赏
  • 举报
回复
自己顶一下
love_jk 2009-04-16
  • 打赏
  • 举报
回复
因为是“随便输入一个关键词”
所以那个关键词对应的字段需要建索引,最好是动态索引
而且最好根据数据的特点进行数据加工,,我只是提个思路,
里面的如何实现比较复杂,,,
netcyb1977 2009-04-16
  • 打赏
  • 举报
回复
Sphinx的含义是“狮身人面像”,是古埃及的金字塔建筑,传说Sphinx是有翼的狮身女怪,她常叫过路行人猜谜, 猜不出者即遭杀害。

但是我这里说的Sphinx是一个高性能的搜索引擎:

http://www.sphinxsearch.com/

Sphinx是一个俄国人开发的搜索引擎,它的主要特点是:

一、性能非常出色
150万条记录一两分钟就索引完毕,2-4GB以内的文本检索速度不到0.1秒钟。ferret也望尘莫及,更不要说lucene了。

二、和数据库集成性很好
Sphinx通过配置文件可以自行读取数据库信息做索引,不依赖任何外部的应用程序,并且可以作为一个daemon进程启动,支持分布式检索,并发响应性能很好。因此很多过去使用ferret的人因为并发检索的问题都改用Sphinx了。

三、可以做MySQL的全文检索
MySQL的数据库引擎是可插拔的结构,Sphinx开发了一个SphinxSE数据库引擎,可以在编译MySQL的时候直接编译到MySQL里面去,这样的话,可以在数据库级别支持高性能的全文检索,那么你可以以如下SQL方式去全文检索了:

select * from xxxx where query='test;sort=attr_asc:group_id' AND ....;

很棒吧。


四、RoR支持也很棒
有一个acts_as_sphinx插件,类似acts_as_ferret,集成到RoR里面很简单。

Sphinx目前可能存在的问题估计还是中文分词问题:

Sphinx支持UTF-8编码的分词,但是他自己的文档上面说仅仅支持英文和俄文的分词,因此我估计对中文分词可能还不能很好的支持。

总之,Sphinx是我们另外一个很棒的选择。
netcyb1977 2009-04-16
  • 打赏
  • 举报
回复
了解了一下,我觉得解决搜索的问题,最快最可行的办法是利用google的自定义搜索。
首先将500万记录,全部输出成静态的html,然后,加入google的自定义搜索。
这样就可以先解决搜索的问题。

至于统计,可以尽可能多的生成静态的统计数据,或者利用其他的缓存技术。
guoyunsky 2009-04-15
  • 打赏
  • 举报
回复
没有玩过这样大的。

2,760

社区成员

发帖
与我相关
我的任务
社区描述
搜索引擎的服务器通过网络搜索软件或网络登录等方式,将Internet上大量网站的页面信息收集到本地,经过加工处理建立信息数据库和索引数据库。
社区管理员
  • 搜索引擎技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧