`

HBase的辅助索引实现

阅读更多


翻译自http://wiki.apache.org/hadoop/Hbase/SecondaryIndexing

 

本文是关于实现HBase辅助索引不同方法的设计文档。

 

使用Coprocessor实现最终一致性的辅助索引

 基本的想法是为主表中的每个索引建立一个额外的辅助表。为列族(family)添加coprocessor,并利用coprocessor处理列族上(或指定的列)的辅助索引。用WAL(write ahead log)来保证持久性,并使用共享队列保证辅助索引的更新在调用者看来是异步的。通常HBase的时间戳可以决绝所有的解决,并且可以保证操作是幂等的(多次重复操作与一次操作等价)。


 当向主表进行Put操作时,会顺序执行以下过程(假设不同的索引更新到不同的辅助表):

 


  1. 为主表生成WALEdit
  2. 为辅助表的更新生成特殊的WALEdit
  3. 将以上两个WALEdit同步到Hlog
  4. 将主表的更改应用到MemStore,并提交到RWCC(MVCC,MultiVersionConsistencyControl)
  5. 将辅助表的更改添加到共享工作队列
  6. 返回给客户端


 

共享队列是一个线程或线程池,通过应用标准的Put操作处理辅助表的更改。

 

当主表故障恢复时,主表的更改可以正常回放,辅助索引的更改需要通过共享队列应用到辅助表(服务器)上。

 

主要的问题在于如何处理WAL和回放

 

由于其他RS(RegionServer)可能会失效,辅助表可能处于离线状态,这可能导致长时间等待辅助表的更新。当收回旧的HLog日志时,如何才能保证所有辅助表已经获得更新?同时,我们需要避免过度利用幂等操作,不只是过度的重新应用所有的操作。

 

是否需要跟踪每个Hlog和它正在进行的辅助表更新操作并阻止日志回收操作,直到所有的操作完成?

 

还是当操作已经完成时,将辅助表的更改写回到WAL中?(这样辅助表失效时不需要回放)

 

或者,可以把辅助表的更改关联到每个上memstore,只有当所有的辅助表内的数据都写入完成后,memstore才可以做flush操作,这可以与现有的语义的日志回收相匹配...但这样做有其他方面的影响,并不会真正解决过多的回放的问题。

 

其他悬而未决的问题:

 

  • 建立辅助表(自动自举?coprocessor初始化时创建?手动?)
  • 读操作API

未来的工作:

  • 通过APIShell定义索引,而不是通过编码生成的每索引一个的coprocessor
  • 现存表的索引创建(基于表的当前数据创建索引,并保持索引的最新状态)
  • 辅助表数据更新的同步方式(如果你想利用性能并具有较强的一​​致性的指标,适用于次要更新)
  • 在辅助表中存储主表数据以避免单次查询中的合并和正则化

 

使用乐观并发控制的辅助索引

 

HBase / IndexedTable实现。

目前在这个位置:https://github.com/hbase-trx/hbase-transactional-tableindexed

 

辅助索引扫描

这个曾经被实现过,但是我不知道它在哪。

 

分享到:
评论

相关推荐

    hbase二级索引

    在HBase的二级索引实现中,一种常见的方式是使用 Coprocessor。Coprocessor 是 HBase 内置的一种扩展机制,允许我们在RegionServer端运行自定义的代码,这样可以更接近数据,减少网络传输,提高性能。通过编写并部署...

    Hbase二级索引与JOIN

    - **解决方法**:通常通过构建额外的数据结构来模拟二级索引,例如使用MapReduce作业预处理数据,创建辅助表等。 - **JOIN操作**:由于HBase的设计初衷是为了支持简单的键值查询,因此其并不直接支持JOIN操作。 - ...

    基于大数据HBase的电子病历智能全文检索系统研究.pdf

    在电子病历检索系统中,HBase能够支持快速的数据读写,同时提供高效的数据索引和查询能力,从而解决了非结构化数据检索的难题。 【智能搜索引擎】 该系统利用先进的搜索引擎技术,对非结构化的临床信息进行解析和...

    No.2hbaseatdidi.pdf

    同时,文档提到Phoenix二级索引场景的应用,暗示了滴滴可能使用了Phoenix来辅助HBase处理复杂查询,这对于大数据分析和决策支持系统非常重要。 访问控制列表(ACL)权限认证是任何数据库系统安全管理的关键组成部分...

    An Efficient Bulk Loading Approach of Secondary index in Distributed Log-Structed Data Stores

    例如,BigTable、LevelDB和HBase等NoSQL数据库存储引擎都是基于分布式LSM树实现的。这种结构可以有效地支持大规模水平扩展应用。 然而,LSM树在数据读取性能方面存在挑战,尤其是当数据通过主键进行分区时,每个...

    《大数据平台搭建与配置管理》期中试卷及答案.docx

    - **解析**: HBase二级索引可通过MapReduce作业或第三方工具构建。 19. **Storm Topology** - **知识点**: Storm中的拓扑结构。 - **解析**: Storm的拓扑结构定义了数据流在网络中的传递路径。 20. **Storm...

    apache-phoenix-4.14.0-cdh5.14.2-bin.tar.gz安装包

    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应用分析.docx

    大数据GIS通过引入分布式计算、分布式存储等技术,如Hadoop、HDFS、Spark、HBase等,实现了对亿级甚至数十亿级空间数据的高效管理和分析。其中,分布式技术包括: 1. 室内空间数据的分布式储存:采用分布式存储体系...

    智慧银行历史数据平台建设方案.pptx

    - **高效存储**:使用HDFS和HBase,高压缩率减少存储需求,HBase的BitMap索引优化查询速度。 - **高效查询**:内存计算机制、SEDA架构动态并发调度、高效多节点归并排序,确保查询效率。 - **在线监控**:全面...

    海洋环境大结构数据集成与共享解决方案研究

    论文中提到的关键技术和理念包括大数据、集成、共享、Hadoop、Hbase、Bigtable算法和辅助索引算法等。 一、大数据与数据密集型科学 论文中提到的“数据密集型科学”是一个新的科学发现范式,与计算科学相区别,被...

    基于Hadoop平台的分布式搜索引擎.zip

    可以通过Hadoop的HBase或Zookeeper等工具来辅助解决。 3. 实时性:传统的搜索引擎可能无法满足实时搜索需求。可以考虑引入Spark等实时计算框架,实现近实时的索引更新和查询。 总结,基于Hadoop的分布式搜索引擎...

    LevelDB SSTable格式详解

    文档提到了参考文献和附录,虽然具体内容未给出,但一般而言,参考文献会包含有关SSTable格式的原始研究或相关背景资料,附录则可能包含一些辅助材料,例如代码实现细节、数据结构定义、算法描述等。 9. 编码与格式...

    大数据爬虫实战

    这些技术包括Java作为主要开发语言,以及HttpClient、Redis、Solr、HBase、Zookeeper、HighChart和HTMLEmail等辅助工具和技术组件。下面将详细介绍这些技术及其在项目中的应用。 #### 二、Java——核心编程语言 **...

    高校大数据及其处理架构.docx

    对于 Web 网页这类非结构化数据,通过 Nutch 进行抓取,Solr 对数据进行索引后存储到 Hbase 数据库中,示意图如图 2 所示。Hbase 数据库是一个开源的高可靠性、高性能、可伸缩、并非建立在关系模型基础上的分布式...

    详解Hadoop.2013

    HdfsIO类主要实现了文件的读写与存取等功能,而HdfsManage类则主要实现了文件存取的一些辅助功能。这些类的使用为Hadoop应用开发提供了便捷的API接口,使得开发者能够更容易地进行文件系统的操作和数据管理。

    基于云计算分布式存储模式的影像数据存储的研究.docx

    **HBase**作为Apache项目下的一个开源分布式列族数据库,是Google Bigtable的一个开源实现。它具有以下显著特点: - **高可靠性**:通过复制机制确保数据安全。 - **高性能**:支持随机读写操作,适用于大规模数据...

Global site tag (gtag.js) - Google Analytics