专栏首页大数据成神之路Phoenix全局索引设计实践

Phoenix全局索引设计实践

文章详情:大数据技术与架构、暴走大数据

概述

全局索引是Phoenix的重要特性,合理的使用二级索引能降低查询延时,让集群资源得以充分利用。本文将讲述如何高效的设计和使用索引。

全局索引说明

全局索引的根本是通过单独的HBase表来存储数据表的索引数据。我们通过如下示例看索引数据和主表数据的关系。

-- 创建数据表CREATE TABLE DATA_TABLE(
  A VARCHAR PRIMARY KEY,
  B VARCHAR,
  C INTEGER,
  D INTEGER);  -- 创建索引CREATE INDEX B_IDX ON DATA_TABLE(B)INCLUDE(C);-- 插入数据UPSERT INTO DATA_TABLE VALUES('A','B',1,2);

当写入数据到主表时,索引数据也会被同步到索引表中。索引表中的主键将会是索引列和数据表主键的组合值,include的列被存储在索引表的普通列中,其目的是让查询更加高效,只需要查询一次索引表就能够拿到数据,而不用去回查主表。其过程如下图

Phoenix表就是HBase表,而HBase Rowkey都是通过二进制数据的字典序排列存储,也就意味着Row key前缀匹配度越高就越容易排在一起。

全局索引设计

我们继续使用DATA_TABLE作为示例表,创建如下组合索引。之前我们已经提到索引表中的Row key是字典序存储的,什么样的查询适合这样的索引结构呢?

CREATE INDEX B_C_D_IDX ON DATA_TABLE(B,C,D); 所有字段条件以=操作符为例:

注:上表查询中and条件不一定要和索引组合字段顺序一致,可以任意组合。

在实际使用中我们也只推荐使用1~4,遵循前缀匹配原则,避免触发扫全表。5~7条件就要扫描全表数据才能过滤出来符合这些条件的数据,所以是极力不推荐的。

其它

  • 对于order by字段或者group by字段仍然能够使用二级索引字段来加速查询。
  • 尽量通过合理的设计数据表的主键规避建更多的索引表,因为索引表越多写放大越严重。
  • 使用了ROW_TIMESTAMP特性后不能使用全局索引
  • 对索引表适当是的使用加盐特性能提升查询写入性能,避免热点。

本文分享自微信公众号 - 大数据技术与架构(import_bigdata),作者:瑾谦

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL和Lucene(Elasticsearch)索引对比分析

    相比于大多数人熟悉的 MySQL 数据库的索引,Elasticsearch 的索引机制是完全不同于 MySQL 的 B+Tree 结构。索引会被压缩放入内存用于...

    大数据技术与架构
  • Klin、Druid、ClickHouse核心技术对比

    KYLIN、DRUID、CLICKHOUSE是目前主流的OLAP引擎,本文尝试从数据模型和索引结构两个角度,分析这几个引擎的核心技术,并做简单对比。在阅读本文之...

    大数据技术与架构
  • 关于Redis的几件小事 | 使用目的与问题及线程模型

    通过上面redis官网的说明可以看出,redis是一个可以对内存数据结构进行存储的东西,它可以用作数据库、缓存和消息代理。它支持数据结构,如字符串,散列,列表,...

    大数据技术与架构
  • 探索索引的奥秘 - 有索引就一定会用么?

        2. 索引处于unusable期间,对表数据做DML操作,此时不维护索引。

    bisal
  • ES[7.6.x]学习笔记(三)新建索引

    比如我们创建一个名字叫组织机构的索引,这个索引只有两个字段,一个id,一个name。并且这个索引设置为2个分片,2个副本。

    小忽悠
  • ES[7.6.x]学习笔记(三)新建索引

    比如我们创建一个名字叫组织机构的索引,这个索引只有两个字段,一个id,一个name。并且这个索引设置为2个分片,2个副本。

    小忽悠
  • 大索引技术,大数据的未来

    不管你信也好,不信也好,大数据时代真的来临了,随着Hadoop技术的普及,其生态圈发展的越来越壮大,Hive、Hbase、Spark、Storm等的一系列新名词...

    用户1756920
  • 面试官:谈谈你对mysql索引的认识?

    大家好,我渣渣烟。我曾经写过一篇《面试官:讲讲mysql表设计要注意啥》,当时写完后,似乎效果还行!

    Java3y
  • mysql索引使用技巧及注意事项

    一.索引的作用       一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂...

    猿人谷
  • MySQL 数据库设计总结

    MySQL支持很多种不同的数据类型,并且选择正确的数据类型对于获得高性能至关重要。本文将对MySQL 数据库设计总结,希望与大家共同探讨。

    漆洪凯

扫码关注云+社区

领取腾讯云代金券