翻译自http://wiki.apache.org/hadoop/Hbase/SecondaryIndexing
本文是关于实现HBase辅助索引不同方法的设计文档。
使用Coprocessor实现最终一致性的辅助索引
基本的想法是为主表中的每个索引建立一个额外的辅助表。为列族(family)添加coprocessor,并利用coprocessor处理列族上(或指定的列)的辅助索引。用WAL(write ahead log)来保证持久性,并使用共享队列保证辅助索引的更新在调用者看来是异步的。通常HBase的时间戳可以决绝所有的解决,并且可以保证操作是幂等的(多次重复操作与一次操作等价)。
当向主表进行Put操作时,会顺序执行以下过程(假设不同的索引更新到不同的辅助表):
-
为主表生成WALEdit
-
为辅助表的更新生成特殊的WALEdit
-
将以上两个WALEdit同步到Hlog
-
将主表的更改应用到MemStore,并提交到RWCC(MVCC,MultiVersionConsistencyControl)
- 将辅助表的更改添加到共享工作队列
- 返回给客户端
共享队列是一个线程或线程池,通过应用标准的Put操作处理辅助表的更改。
当主表故障恢复时,主表的更改可以正常回放,辅助索引的更改需要通过共享队列应用到辅助表(服务器)上。
主要的问题在于如何处理WAL和回放
由于其他RS(RegionServer)可能会失效,辅助表可能处于离线状态,这可能导致长时间等待辅助表的更新。当收回旧的HLog日志时,如何才能保证所有辅助表已经获得更新?同时,我们需要避免过度利用幂等操作,不只是过度的重新应用所有的操作。
是否需要跟踪每个Hlog和它正在进行的辅助表更新操作并阻止日志回收操作,直到所有的操作完成?
还是当操作已经完成时,将辅助表的更改写回到WAL中?(这样辅助表失效时不需要回放)
或者,可以把辅助表的更改关联到每个上memstore,只有当所有的辅助表内的数据都写入完成后,memstore才可以做flush操作,这可以与现有的语义的日志回收相匹配...但这样做有其他方面的影响,并不会真正解决过多的回放的问题。
其他悬而未决的问题:
-
建立辅助表(自动自举?coprocessor初始化时创建?手动?)
-
读操作API
未来的工作:
-
通过API或Shell定义索引,而不是通过编码生成的每索引一个的coprocessor
- 现存表的索引创建(基于表的当前数据创建索引,并保持索引的最新状态)
-
辅助表数据更新的同步方式(如果你想利用性能并具有较强的一致性的指标,适用于次要更新)
- 在辅助表中存储主表数据以避免单次查询中的合并和正则化
使用乐观并发控制的辅助索引
由HBase / IndexedTable实现。
目前在这个位置:https://github.com/hbase-trx/hbase-transactional-tableindexed
辅助索引扫描
这个曾经被实现过,但是我不知道它在哪。
分享到:
相关推荐
在HBase的二级索引实现中,一种常见的方式是使用 Coprocessor。Coprocessor 是 HBase 内置的一种扩展机制,允许我们在RegionServer端运行自定义的代码,这样可以更接近数据,减少网络传输,提高性能。通过编写并部署...
- **解决方法**:通常通过构建额外的数据结构来模拟二级索引,例如使用MapReduce作业预处理数据,创建辅助表等。 - **JOIN操作**:由于HBase的设计初衷是为了支持简单的键值查询,因此其并不直接支持JOIN操作。 - ...
在电子病历检索系统中,HBase能够支持快速的数据读写,同时提供高效的数据索引和查询能力,从而解决了非结构化数据检索的难题。 【智能搜索引擎】 该系统利用先进的搜索引擎技术,对非结构化的临床信息进行解析和...
同时,文档提到Phoenix二级索引场景的应用,暗示了滴滴可能使用了Phoenix来辅助HBase处理复杂查询,这对于大数据分析和决策支持系统非常重要。 访问控制列表(ACL)权限认证是任何数据库系统安全管理的关键组成部分...
例如,BigTable、LevelDB和HBase等NoSQL数据库存储引擎都是基于分布式LSM树实现的。这种结构可以有效地支持大规模水平扩展应用。 然而,LSM树在数据读取性能方面存在挑战,尤其是当数据通过主键进行分区时,每个...
- **解析**: HBase二级索引可通过MapReduce作业或第三方工具构建。 19. **Storm Topology** - **知识点**: Storm中的拓扑结构。 - **解析**: Storm的拓扑结构定义了数据流在网络中的传递路径。 20. **Storm...
3. **解压安装**:将下载的压缩包解压到一个合适的目录,例如`/opt`,这可以通过命令`tar -zxvf apache-phoenix-4.14.0-cdh5.14.2-bin.tar.gz`实现。 4. **配置Phoenix**:打开`conf/phoenix-server.xml`配置文件,...
本项目实现了基于分布式数据库的图像检索系统。其中,TF-IDF作为相似度依据,MapReduce+HBase作为分布式框架。 集群配置 --- 4个节点:1个Master,3个Slave,均运行64位Centos系统 运行环境 --- Hadoop:...
大数据GIS通过引入分布式计算、分布式存储等技术,如Hadoop、HDFS、Spark、HBase等,实现了对亿级甚至数十亿级空间数据的高效管理和分析。其中,分布式技术包括: 1. 室内空间数据的分布式储存:采用分布式存储体系...
- **高效存储**:使用HDFS和HBase,高压缩率减少存储需求,HBase的BitMap索引优化查询速度。 - **高效查询**:内存计算机制、SEDA架构动态并发调度、高效多节点归并排序,确保查询效率。 - **在线监控**:全面...
论文中提到的关键技术和理念包括大数据、集成、共享、Hadoop、Hbase、Bigtable算法和辅助索引算法等。 一、大数据与数据密集型科学 论文中提到的“数据密集型科学”是一个新的科学发现范式,与计算科学相区别,被...
可以通过Hadoop的HBase或Zookeeper等工具来辅助解决。 3. 实时性:传统的搜索引擎可能无法满足实时搜索需求。可以考虑引入Spark等实时计算框架,实现近实时的索引更新和查询。 总结,基于Hadoop的分布式搜索引擎...
文档提到了参考文献和附录,虽然具体内容未给出,但一般而言,参考文献会包含有关SSTable格式的原始研究或相关背景资料,附录则可能包含一些辅助材料,例如代码实现细节、数据结构定义、算法描述等。 9. 编码与格式...
这些技术包括Java作为主要开发语言,以及HttpClient、Redis、Solr、HBase、Zookeeper、HighChart和HTMLEmail等辅助工具和技术组件。下面将详细介绍这些技术及其在项目中的应用。 #### 二、Java——核心编程语言 **...
对于 Web 网页这类非结构化数据,通过 Nutch 进行抓取,Solr 对数据进行索引后存储到 Hbase 数据库中,示意图如图 2 所示。Hbase 数据库是一个开源的高可靠性、高性能、可伸缩、并非建立在关系模型基础上的分布式...
HdfsIO类主要实现了文件的读写与存取等功能,而HdfsManage类则主要实现了文件存取的一些辅助功能。这些类的使用为Hadoop应用开发提供了便捷的API接口,使得开发者能够更容易地进行文件系统的操作和数据管理。
**HBase**作为Apache项目下的一个开源分布式列族数据库,是Google Bigtable的一个开源实现。它具有以下显著特点: - **高可靠性**:通过复制机制确保数据安全。 - **高性能**:支持随机读写操作,适用于大规模数据...