首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

给你十台机器,每个机器2个cpu,2g内存,现在已知在10亿条记录的数据库里执行一次查询需要5秒,问用什么方法能让90%的查询能在100毫秒以内返回结果

2012-10-18 
给你10台机器,每个机器2个cpu,2g内存,现在已知在10亿条记录的数据库里执行一次查询需要5秒,问用什么方法能

给你10台机器,每个机器2个cpu,2g内存,现在已知在10亿条记录的数据库里执行一次查询需要5秒,问用什么方法能让90%的查询能在100毫秒以内返回结果。
给你10台机器,每个机器2个cpu,2g内存,现在已知在10亿条记录的数据库里执行一次查询需要5秒,问用什么方法能让90%的查询能在100毫秒以内返回结果。


[解决办法]
将10亿条记录排序,然后分到10个机器中,分的时候是一个记录一个记录的轮流分,
确保每个机器记录大小分布差不多,每一次查询时,同时提交给10台机器,同时查询,
因为记录已排序,可以采用二分法查询.

如果无法排序,只能顺序查询,那就要看记录本身的概率分布,
否则不可能实现.

一个机器2个CPU未必能起到作用,要看这两个CPU能否并行存取内存,取决于系统架构.

[解决办法]
10亿条数据均衡分配到10台电脑,每台电脑是1亿。
PC数 1 2 3 4 5 6 7 8 9 10
2G内存 * 10 = 20G内存

可以将90%的数据缓存到10台PC的内存中,剩下的数据缓存到硬件中的高速索引文件中。借此实现100毫秒响应系统。
[解决办法]
建议参考下操作系统中的快表是怎么工作的。

2台机器共4个CPU,也就是说并行操作的数量为4,也就是说,分页查询的基本单位为4条,假设分3级,

10亿约=2的30次方(1073741824),按照1:1024安排级差

第一级:全体数据
第二级:262124组数据/共1048576个
第三级:256组/1024个数据

从楼主给出的条件看,查询一组数据(4个)只需要0.00002ms,也就是说,即使在第二级查询也只要5MS左右。

再进一步,我们只在第一级和第二级放数据,而跟高级只放关键字的索引,可大大提高效率

热点排行