【转贴】为什么Google不直接使用一套bigtable来存放网页的倒排索引_浮云随风_新浪博客
2013-03-16 21:05
429 查看
【转贴】为什么Google不直接使用一套bigtable来存放网页的倒排索引_浮云随风_新浪博客
【转贴】为什么Google不直接使用一套bigtable来存放网页的倒排索引
(2011-03-20 22:12:02)
转载▼
标签:
bigtable
杂谈
分类: 技术
来源:http://nosql-wiki.org/wiki/bin/view/Main/ArchRandomThoughts
我们知道,google的big table是一套很牛的存储系统,甚至可以说是一套完备的存储系统。但是为什么好像没有听说google使用它来存储倒排索引呢? 可以设想一下如何用bigtalbe来存倒排拉链:rowkey是关键字,document id是其中一个column,这个column里面有很多的值,每个id对应了一个网页, 每个对应的网页中出现了该关键字。按照这种存储模式,一个关键字的拉链肯定存放在一个tablet上。对于网页搜索而言,存在两个特征:
关键字对应的倒排拉链很长;
查询的结果不完全需要全局最优
设想一次查询中出现了两个关键词,foo, bar。查询的处理过程是:
查出foo对应的倒排拉链
查出bar的倒排拉链(可以和第一步并发进行)
进行merge和rank排序
返回查询结果
在倒排拉链很长的情况下,前面3步都会花很长的时间。如果使用一套bigtable来存储,单次查询的响应时间将会很长。
实际的搜索引擎是如何处理的呢?可以通过并发来降低单次查询的latency。设想所有的关键词分布在n个bigtable集群上, 那么每个bigtable集群只有1/n的倒排拉链长度。每个bigtale集群上进行上述的查询过程,每个集群只返回m个最优结果, 然后由merge模块来对这n*m个结果进行排序。按照这样的处理方式,前3步的并行度为n。这样可以大大的减少单次查询的 处理时间。
这里的每个bigtable集群对应了百度搜索架构中的BS(basic search engine),而merge模块对应了百度搜索架构中的 AS(advanced search engine)。
那么实际实现中,这些数据是如何进行划分的呢?基于上述原因,肯定不能基于关键词划分,在百度的实现中,数据划分是通过网页url的hash值进行划分,这样保证每个BS集群的数据规模比较均匀。
(2011-03-20 22:12:02)
转载▼
标签:
bigtable
杂谈
分类: 技术
来源:http://nosql-wiki.org/wiki/bin/view/Main/ArchRandomThoughts
我们知道,google的big table是一套很牛的存储系统,甚至可以说是一套完备的存储系统。但是为什么好像没有听说google使用它来存储倒排索引呢? 可以设想一下如何用bigtalbe来存倒排拉链:rowkey是关键字,document id是其中一个column,这个column里面有很多的值,每个id对应了一个网页, 每个对应的网页中出现了该关键字。按照这种存储模式,一个关键字的拉链肯定存放在一个tablet上。对于网页搜索而言,存在两个特征:
关键字对应的倒排拉链很长;
查询的结果不完全需要全局最优
设想一次查询中出现了两个关键词,foo, bar。查询的处理过程是:
查出foo对应的倒排拉链
查出bar的倒排拉链(可以和第一步并发进行)
进行merge和rank排序
返回查询结果
在倒排拉链很长的情况下,前面3步都会花很长的时间。如果使用一套bigtable来存储,单次查询的响应时间将会很长。
实际的搜索引擎是如何处理的呢?可以通过并发来降低单次查询的latency。设想所有的关键词分布在n个bigtable集群上, 那么每个bigtable集群只有1/n的倒排拉链长度。每个bigtale集群上进行上述的查询过程,每个集群只返回m个最优结果, 然后由merge模块来对这n*m个结果进行排序。按照这样的处理方式,前3步的并行度为n。这样可以大大的减少单次查询的 处理时间。
这里的每个bigtable集群对应了百度搜索架构中的BS(basic search engine),而merge模块对应了百度搜索架构中的 AS(advanced search engine)。
那么实际实现中,这些数据是如何进行划分的呢?基于上述原因,肯定不能基于关键词划分,在百度的实现中,数据划分是通过网页url的hash值进行划分,这样保证每个BS集群的数据规模比较均匀。
相关文章推荐
- 从安全的角度理解――为什么要使用 Google 的服务?【转贴】
- 为什么倒排索引不采用zlib这样的字典压缩算法——因为没法直接使用啊
- 为什么巴拿马运河要使用水闸提升的方式,而不直接连通两大洋?
- 为什么在中断向量表中不直接LDR PC ,"异常地址"。而是使用一个标号,然有再在后面使用 DCD定义这个标号
- 使用库函数也有系统调用的开销,为什么不直接使用系统调用呢?
- 小白求助!!!请问Android 使用BroadCast实现强制下线功能,点击强制下线按钮,程序直接奔溃是为什么啊??
- 为什么不直接使用Response.Write而要使用Response.Output.WriteLine
- 直接使用ip访问google搜索
- [Android开发笔记]google提供的一套增删改查方法的使用。
- Google Map API使用详解(十二)——如何在自己的网页中嵌入地图
- 为什么原生JS可以直接使用ID名称来获取元素
- 为什么在Google上搜不到我的网页
- C++使用POST方法向网页提交数据-----C++发送HTTP数据获取Google天气预报
- 为什么使用getRequestDispatcher转向新的地址后网页乱码?
- 为什么其他类没继承System类 ,也可以直接使用System.exit()方法??
- 为什么局域网要用mac地址而不直接使用IP地址
- Android UI 使用HTML布局(直接打开服务器网页)
- Android UI 使用HTML布局(直接打开server网页)