孤惯|微软 Bing 搜索核心技术 BitFunnel 原理揭秘( 四 )


假设我们还是一共有十六篇文档和十六位的表示 , 那么矩阵表示为16*16 , 同时我们反转得到了十六位*十六篇 , 我们可以知道 , 短文章的文档里面为1的个数还是相当少的 , 属于稀疏矩阵 , 会浪费相当大的空间存储 , 而长篇的文章里面1的个数相当高 , 其对应的错误率也很高 。 在BitFunnel中,集群间按不同文章的长度进行切割分享 , 下面例子切割成了三部分 , 实际上会按其他十到十五种不同组 。
孤惯|微软 Bing 搜索核心技术 BitFunnel 原理揭秘
孤惯|微软 Bing 搜索核心技术 BitFunnel 原理揭秘当按长度分好组后 , 我们就可以对稀疏部分进行压缩存储 , 密集的文章进行扩充位数存储 , 降低错误率 。
孤惯|微软 Bing 搜索核心技术 BitFunnel 原理揭秘那么随之我们跟之前一样就可以 , 当我们的查询文档Query对应只有三位为1时 , 我们分别对这三组的对应行求与运算即可得出结果:
孤惯|微软 Bing 搜索核心技术 BitFunnel 原理揭秘这样的计算方式实际上在90年代的时候就提出来了 , 但是一直不被认可 。 为什么?当时普遍都还是在单个计算机上进行各种算法操作 , 那么在一台机器上又将数据如上图一样切割成三部分分别进行处理很明显代价得不偿失 。 原本只需要进行一遍操作的流程被复杂化了 , 而且事实上也不仅仅分割成三部分 , 往往是十几类 。 而随着时代的发展 , 我们现在拥有了分布式的集群 , 我们可以将不同的机器处理不同文章长度种类的文档:
孤惯|微软 Bing 搜索核心技术 BitFunnel 原理揭秘其次还有不同的是内存技术的发展 , 以前我们用每GB的花费金钱来衡量其中的成本是错误的方式:
孤惯|微软 Bing 搜索核心技术 BitFunnel 原理揭秘传统衡量方式上 , 硬盘获得存储1GB的空间只需要0.05美元 , 而DDR4需要7.44美元 , 导致了大量企业认为能够增加存储就不断往硬盘上堆积 , 但这种方式很明显是错误的 。
假设公司有存储数据总量为D , 然后服务上需要查询的文档总量设置为Q , 如果我们使用快速的机器 , Q个查询很快就完成了(Q量可以通过广播的方式放进内存去各个数据分块中快速查询然后累计返回):
孤惯|微软 Bing 搜索核心技术 BitFunnel 原理揭秘如果我们用存储大但是处理速度慢的机器 , 我们仍需要遍历所有的数据才能获得想要的数据总量:
孤惯|微软 Bing 搜索核心技术 BitFunnel 原理揭秘如果我们采用BitFunnel的方式来处理 , 那么 , 查询量Q可以用(带宽/总量)表示 , 引入这样的概念就可以将之前硬盘和DDR4换一种计算方式 , 用每秒查询带宽量以及每美金每秒查询带宽量来表示之间能力差别 , 结果如下:
孤惯|微软 Bing 搜索核心技术 BitFunnel 原理揭秘我们需要179倍的硬盘才能比得上DDR4 , 价格是DDR4的76倍代价 。


推荐阅读