首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

看看哪位高手可以解决大数据量的搜索

2012-02-06 
看看谁可以解决大数据量的搜索题目:有一个数据库其中有10亿条的记录,在其中查询一条记录需要5秒。现在有服

看看谁可以解决大数据量的搜索
题目:
有一个数据库其中有10亿条的记录,在其中查询一条记录需要5秒。现在有服务器10台(组成一个局域网提供服务),每个服务器有2个cpu,2G的内存。现在要求   将   对其中数据   90%   的查询可以在   100ms   内完成。问怎么解决?
 
thanks.
andylin  


[解决办法]
如果要求join结果集的话。

你在建立数据的时候,按mod(key)的方法,把数据分开放在10台机器上。大概每台机器是1G左右的数据

对主键进行加速就可以达到效果,比如把1G的数据分成多个表来存放。这样在更新速度上可以得到优化。

重点不是查询,是在建数据的时候是如何建立的。合理的分配你的数据。
[解决办法]
如果不要求join结果集的话。

我对数据库不懂. 非数据库我可以做到,数据库的没有经验。
[解决办法]
假设之前是1个CPU,1G内存.
不做任何的算法改进,在现在算法的基础上将数据用比较均匀的方式分为十段,每段取出十分之一放到其中一台服务器上.理论上获得的速度提升就接近40倍.检索速度已经达到125ms. 基本上就是125 * 0.9 = 112.5已经基本达到要求.
再进行配置和算法的优化一定可以满足需求.
[解决办法]
也给一个处理的方案
1.数据库确实可以在在一台机器上,但是在组建的局域网的机器全部In service以后,
可以将数据分发到这些机器上,进行数据的插入(可以是保存在local的数据库,也可以使文件中);各台服务器负责自己维护的数据.
2.具体把哪些数据记录分发到哪些机器上,将会是提高这个系统性能的关键之一。这和数据记录,查询key自身的特征有关系。需要建立,查询key,各台服务器标示(e.g. IP/MAC)之间的映射关系,在初始化过程中,该映射读入到内存。
3.对于每一台服务器上的访问,可以使用的方法比较多。根据题目中一再强调外存文件的顺序和随机访问速度的差异,可以看出,比较倾向于直接的文件访问。这个就不谈那。想讨论一下使用文件的内存映射,可以在该服务器上建两个独立的进程,各自具有地址空间,将数据库服务器分发过来的数据保存在文件中(保存之前,用hash函数处理),然后映射到地址空间,提高访问速度。

热点排行