首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Hbase二级索引

二级索引索引Join是多数业务系统要求存储引擎提供的基本特性,RDBMS早已支持,NOSQL阵营也在摸索着符合自身特点的最佳解决方案。...这篇文章会以Hbase做为对象来讨论如何基于Hbase构建二级索引与实现索引join。...理论目标在HBase中实现二级索引索引Join需要考虑三个目标:1,高性能的范围检索。2,数据的低冗余(存储所占的数据量)。3,数据的一致性。 性能与数据冗余,一致性是相互制约的关系。...二级索引的原理猜测因为coprocessor的最终方案还未公布,就提供的这些hooks来说,二级索引的实现应该是拦截同一个region的put, get, scan, delete等操作。...业界已经公开的二级索引方案罗列: 0.19.3版Secondary Index 一直关注HBase的同学,或许知道,早在HBase 0.19.3版发布时,曾经加入过secondary index的功能

1.7K40

HBase二级索引总结

HBase二级索引方案总结 图1: HBase Rowkey-Region 关系图 然而,随着在HBase系统上应用的驱动,人们发现Global-Rowkey-Indexing不再满足应用的需求...HBase二级索引方案总结 图2 使用HBase Coprocessor实现Secondary Indexing 2、由客户端发起对于主表和索引表的Put、Delete操作的双重操作。...虽然在这种方案里无法保证原子性和一致性,但是通过TimeStamp的设置,No Locks和 No Server-side codes,使其在二级索引上有着较大的优势。...2、离线更新索引表。在真正需要二级索引的场景内,其时效性要求往往不高。可以将索引实时更新到Redis等KV系统中,定时从KV更新索引Hbase的Indexing Table中。...PS:社区和生产系统关于Hbase二级索引的方案,还在继续当中,会持续关注。 http://blog.sina.com.cn/s/blog_4a1f59bf01018apd.html

1.8K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Hbase使用Coprocessor构建二级索引

    为什么需要二级索引 Hbase默认只支持对行键的索引,那么如果需要针对其它的列来进行查询,就只能全表扫描了。表如果较大的话,代价是不可接受的,所以要提出二级索引的方案。...而其它的像利用Phoenix,solr等外部框架构建索引Hbase的学习并没有太大的帮助。综上所述,我使用了Hbase自带的Cprocessor(协处理器)来实现。...二级索引:可以使用Coprocessor来维持一个二级索引。正是我们需要的 索引设计思想 关键部分来了,既然Hbase并没有提供二级索引,那如何实现呢?...其中第二步是很容易实现的,因为Hbase的行键是有索引的,那关键就是第一步,如何通过cf1:col2的值找到它对应的行键。...很容易想到建立cf1:col2的映射关系,即将它们提取出来单独放在一张索引表中,原表的值作为索引表的行键,原表的行键作为索引表的值,这就是Hbase的倒排索引的思想。

    55430

    基于solr实现hbase二级索引

    基于solr实现hbase二级索引 [X] 目的: 由于hbase基于行健有序存储,在查询时使用行健十分高效,然后想要实现关系型数据库那样可以随意组合的多条件查询、查询总记录数、分页等就比较麻烦了。...想要实现这样的功能,我们可以采用两种方法: 使用hbase提供的filter, 自己实现二级索引,通过二级索引 查询多符合条件的行健,然后再查询hbase....第二种是适用范围就比较广泛了,不过根据实现二级索引的方式解决的问题也不同.这里我们选择solr主要是因为solr可以很轻松实现各种查询(本来就是全文检索引擎)....表里的字段需要在solr里索引,那么Qualifier设计为已_(i|l|f|d|b|s|t|dt)结尾的solr动态字段!...启动HBase: 在master hbase server上执行: ${HBASE_HOME}/bin/start-hbase.sh 测试: /opt/hbase/bin/hbase shell >status

    76230

    上帝视角Hbase二级索引方案全解析

    什么是二级索引 Coprocessor 协处理器类型 Coprocessor方案(Phoenix等) Phoenix二级索引特点 非Coprocessor方案 Lily HBase Indexer CDH...Search 其他方案 什么是二级索引 HBase中的一级索引指数据在写入region时,会根据rowkey进行排序后写入,之后regionserver在加载region时,会自动为当前region的...HBase本身只提供基于行键和全表扫描的查询,而行键索引单一,对于多维度的查询困难。 二级索引的本质就是建立各列值与行键之间的映射关系。...同时协处理器也允许用户扩展实现HBase目前所不具备的功能,如权限校验、二级索引、完整性约束等。...Apache Phoenix: 功能围绕着SQL on hbase,支持和兼容多个hbase版本, 二级索引只是其中一块功能。

    1.4K20

    Hbase+Solr实现二级索引提供高效查询

    接着上一篇介绍协处理器的文章http://qindongliang.iteye.com/blog/2277145,本篇我们来实战一个例子,看下如何使用协处理来给Hbase建立二级索引。...,性能在秒级别可接受 需求分析: hbase的目前的二级索引种类非常多,但大多数都不太稳定或成熟,基于Lucene的全文检索服务SolrCloud集群和ElasticSearch集群是二种比较可靠的方案...技术实现 (1)搭建一套solr或者es集群,并且提前定制好schemal,本例中用的是solr单节点存储索引, 如果不知道怎么搭建solrcloud集群或者elasticsearch集群,请参考博客...(9)启动solr或者es集群 (9)在hbase shell或者 hbase java client进行put数据,然后等待查看索引里面是否正确添加数据,如果添加失败,查看hbase的regionserver...的http-client组件与本例中用的最新的solr的http-client组件版本不一致导致,添加索引报错。

    2.9K60

    如何使用Phoenix在CDH的HBase中创建二级索引

    本文Fayson主要介绍如何在CDH中使用Phoenix在HBase上建立二级索引。...1.先删除之前建立的函数索引INDEX2_HBASE_TEST。 drop index INDEX2_HBASE_TEST on hbase_test; (可左右滑动) ?...可以发现这2个查询语句返回时间都在毫秒级,而如果不建立索引,查询时间为35S以上。 7.总结 ---- Phoenix的二级索引主要有两种,即全局索引和本地索引。全局索引适合那些读多写少的场景。...1.创建索引时使用覆盖索引 CREATE INDEX index1_hbase_test ON hbase_test(s6) INCLUDE(s2) (可左右滑动) 这种索引会把s2加到索引表里面,同时...3.创建本地索引 create local index index2_hbase_test on hbase_test (s7); (可左右滑动) 本地索引和全局索引不同的是,查询语句中,即使所有的列都不在索引定义中

    7.5K30

    2021年大数据HBase(十二):Apache Phoenix 二级索引

    Apache Phoenix 二级索引 因为没有建立索引,组合条件查询效率较低,而通过使用Phoenix,我们可以非常方便地创建二级索引。...Phoenix中的索引,其实底层还是表现为HBase中的表结构。这些索引表专门用来加快查询速度。...一、索引分类 全局索引 本地索引 覆盖索引 函数索引 二、索引分类_全局索引 全局索引适用于读多写少业务 全局索引绝大多数负载都发生在写入时,当构建了全局索引时,Phoenix会拦截写入(DELETE、...money");       可以在HBase shell中看到,Phoenix自动帮助我们创建了一张GBL_IDX_ORDER_DTL的表。...说明本地索引生效 2、删除索引 drop index LOCAL_IDX_ORDER_DTL on ORDER_DTL; 八、陌陌案例二级索引构建 1、创建本地函数索引 CREATE LOCAL INDEX

    1.1K40

    HBase整合MapReduce之建立HBase索引

    HBase索引主要用于提高Hbase中表数据的访问速度,有效的避免了全表扫描,HBase中的表根据行健被分成了多个Regions,通常一个region的一行都会包含较多的数据,如果以列值作为查询条件,就只能从第一行数据开始往下找...显然索引表仅需要包含一个列,所以索引表的大小和原表比起来要小得多,如图4-14给出了索引表与原表之间的关系。...从图可以看出,由于索引表的单条记录所占的空间比原表要小,所以索引表的一个Region与原表相比,能包含更多条记录 ?...假设HBase中存在一张表heroes,里面的内容如表所示,则根据列info:name构建的索引表如图4-15所示。Hbase会自动将生成的索引表加入如图4-3所示的结构中,从而提高搜索的效率 ?...创建的索引表记录如下图: ?

    1.1K50

    phoenix二级索引

    二级索引 二级索引是从主键访问数据的正交方式。Hbase中有一个按照字典排序的主键Rowkey作为单一的索引。不按照Rowkey去读取记录都要遍历整张表,然后按照你指定的过滤条件过滤。...此外,具有二级索引的事务表可能会降低写入数据表的可用性,因为数据表及其辅助索引表必须可用,否则写入将失败。...通过杀死服务器,我们确保WAL将在恢复时重新使用,将索引更新重新生成到相应的表中。这确保了二级索引在知道无效状态时不会继续使用。...在这种一致性模式下,在重建二级索引时,写入数据表不会被阻塞。但是,在重建过程中,二级索引不会被查询使用。...3.4 写入失败时禁用可变索引,手动重建 这是可变二级索引的最低一致性水平。在这种情况下,当写入二级索引失败时,索引将被标记为禁用,并且手动重建所需的索引以使其再次被查询使用。

    3.5K90

    聚簇索引二级索引

    二级索引(辅助索引二级索引存储的是记录的主键,而不是数据存储的地址。...以Mysql的InnoDB为例 主键是聚集索引 唯一索引、普通索引、前缀索引等都是二级索引(辅助索引) 示例 下面我们通过一个具体的示例进行演示聚集索引二级索引 pl_ranking(编程语言排行榜表...二级索引(辅助索引) ? image.png 从上图中我们发现,该B*tree根据plname列进行构建的,只存储索引数据,plname 和 id 的映射。...select id, plname, ranking from pl_ranking where plname='Java'; 首先通过二级索引树中找到 Java 对应的主键id 为 “16”(读取2...如果能使用主键查找的,就尽量使用主键索引进行查找。 结论二 从上面图中我们还可以分析得出以下结论: 主键定义的长度越小,二级索引的大小就越小,这样每个磁盘块存储的索引数据越多,查询效率就越高。

    2.6K40

    MySQL 聚集索引二级索引

    Clustered and Secondary Indexes(聚集索引二级索引) Every InnoDB table has a special index called the clustered...每张使用 InnoDB 作为存储引擎的表都有一个特殊的索引称为聚集索引,它保存着每一行的数据,通常,聚集索引就是主键索引。...How Secondary Indexes Relate to the Clustered Index(二级索引和聚集索引如何关联) All indexes other than the clustered...除了聚集索引外的其他索引类型都属于二级索引。在 InnoDB 中,二级索引中的每个记录都包含该行的主键列,以及二级索引指定的列;聚集索引中,InnoDB 通过主键值来查询数据行。...如果主键过长,二级索引就需要更大的空间,因此,使用短的主键列是很有利的。

    1K20

    Phoenix index 二级索引

    一、索引的创建 通过二级索引,索引的列或表达式形成一个备用行键,以允许沿着这个新轴进行点查找和范 围扫描。...在用使用全局索引之前需要在每个RegionServer上的hbase­site.xml添加如下属性: 注意:如果使用的是ambari或者cloudera搭建的集群,可直接创建全局或本地索引,这些配置文件已经配置好了...在使用本地索引需要在Master的hbase-site.xml添加以下属性 注意:注意本地索引与全局索引的区别,全局只有在,select和where中都为索引才会使用索引 复制代码 <property...(默认值:2147483647) 每张索引表所能使用的线程(即在一张索引表中同时可以有多少线程对其进行写入更新),增加 此值可以提高更新索引的并发量 6.hbase.htable.threads.keepalivetime...htable,由于是缓存在内存中,所以 其值越大,其需要的内存越多 注意:如果数据的导入是通过Hbase直接导入,而不是通过Phoenix中间层,则索引不会建立成功,会出现索引表与数据表的条数不一致

    37610

    SAP里主索引二级索引区别

    透明表索引有两种:分别是主索引二级索引。 主索引是在我们创建表激活后由系统自动创建的,这个我们不能修改;二级索引可以我们自己创建。...主索引是表的主键,二级索引可以根据你自己需要用到表的任何字段的组合来创建。...在使用二级索引时,WHERE条件字段和字段顺序要与二级索引字段和字段顺序粗略一致,这样才能提高检索效率 索引的第一个字段都是MANDT,后面的根据需求有序的输入索引字段 可以点击‘Table Fileds...’选择表中用于索引的字段,可多选;保存、激活注意 现在再次点击‘索引’,就可以看到我们刚才创建的索引了 PS:我们可以最大创建9条索引,注意不是索引越多越好,太多的话会严重浪费服务器资源 ?

    62930

    MyISAM主键索引树和二级索引

    MyISAM:数据和索引没有放在一块,叫做 非聚集索引,不可能回表 InnoDB:数据和索引存放在一块,叫聚集索引 ,会涉及回表 此时假设一个场景:uid是主键,有主键索引树,name有索引,创建二级索引树...当前场景下的主键索引树如下,B+树非叶子节点上只有索引值,叶子节点上有索引值和数据地址 MyISAM索引树原理图如下: 当前场景下的二级索引树如下: InnoDB二级索引树叶子节点上是主键值uid,...而MyISAM存的则是数据的地址 当前场景下,主键索引树和二级索引树两者之间的联系: 在MyISAM中,主索引和辅助索引(Secondary key)在结构上没有任何区别,只是主索引要求key是唯一的...,而辅助索引的key可以重复,MyISAM二级索引树结构图如下: 当前场景下,若使用MyISAM存储引擎查找数据,以name作为索引,到二级索引树上查找结果(构造索引树的过程也涉及磁盘I/O),如果指定的...MyISAM存储引擎,B+树叶子节点存储关键字和数据地址,也就是说索引关键字和数据没有在一起存放,体现在磁盘上,表的数据存放在*.MYD文件中,表的索引存放在*.MYI文件中。

    23220
    领券