索引的分布式存储
来源:互联网 发布:张继科色口红mac 编辑:程序博客网 时间:2024/05/01 17:29
一 先不说分布式,先说在磁盘上索引怎么存储。
在内存里,索引肯定是以BST,Trie,Hashtable等形式存在,便于查找。在磁盘上的存储呢?
1)不要想到树的序列化问题,不一样,第一,索引是先在磁盘后load到内存里,第二,树的序列化是说要完全保存树的结构,这里不需要,只需要是一颗平衡树就行。
2)其实就是一个symbol table,词典,key-value 表,在磁盘上时候不需要有序,只要相关数据保存到了就可以了,load的过程就是给定一个词典建一棵Trie树的问题。只需要从一棵空trie开始,(key,value)做一个结点,不断插入入到Trie里(或者 BST ,hash table)。
3)MDS对索引的存储是用xml 把trie的结构也保存了下来,不是为了存储这个树结构本身,而是为了利用Trie的特点,相同前缀只出现一次,公共前缀多的情况下节省存储。当然xml又有overhead,未必真的能节省,但思路是这样。在磁盘上保存树的结构,并不能加速load。
二、分布式下怎么存?
1 按照docId 进行分区(partition), 即局部索引,一台机器对应docId的一个range, 单独的build index,一个关键词在一台机器上只能查到部分的docId列表,搜索的处理流程是,前端把关键词发给每一个结点,并行的查询,最后聚合docId 列表。 好处:
1)可靠,一个node挂了,只是造成docId列表不完全,只是少部分结果没有返回,不影响全局。
2)并行查找返回结果,loadbalance,避免单机返回所有的docId 列表造成的单机过大网络负载。
2. 按wordId 分区,全局索引
一台机器负责一个wordId range的索引,关键词映射到具体的机器,这台机器包括这个关键词的所有docId。
好处:1)查询只需要访问一台机器,也不需要后续的聚合
2)如果查询的关键词分布均匀,loadbalance比较好。局部索引每次查询都要发给所有机器,每台机器的有可能排队
缺点:可靠性差,如果一台机器挂了,这个机器对应所有关键词的查询都会挂,当然也可以通过replica cluster方案解决可靠性问题。
3 实际系统中一般采用局部索引,因为可靠性比较重要,再者这种按docId 分区的方案比较自然,因为前端的crawler的产出就是doc库,很自然的就是按docId range分区,而且也许crawler本身就是分布式的,每个crawler 维护自己独立的网页库,天然就分区好了。
- 索引的分布式存储
- 分布式存储--Mysql--序列2--索引的设计策略
- 分布式大数据存储:向上索引法
- 分布式存储--Mysql--序列1--聚簇索引&非聚簇索引
- 分布式存储的构想
- Mongodb的分布式存储
- 分布式存储的概念
- Lucence索引的存储
- 优质论文list(分布式系统/存储/索引相关)
- 分布式存储的一些概念
- memcached的分布式存储浅析
- 海量存储系列:分布式存储的场景
- Lucene索引存储的优化
- Mysql索引的存储方式
- 分布式存储
- 分布式存储
- 分布式存储
- 索引存储
- ListView滑动删除 ,仿腾讯QQ
- 图片的轮转
- ubuntu14.04 访问windows目录的方法 mount.cifs方式 取代smbfs方式
- Android源码之简单定时器
- 翻转二叉树节点数据
- 索引的分布式存储
- HDOJ 5425 Rikka with Tree II
- hdu 2000 ASCII码排序
- android使用WiFi无线调试程序
- win 7上32位系统安装office 2010时,提示需要安装MSXML版本6.10.1129.0组件的解决方法
- 代理模式(二):代理模式应用实例(收费商务信息查询系统)
- Xcode打包踩过的那些坑
- 基于W5500的嵌入式TFTP服务器实现
- MFC之静态文本框的使用