Hologres 索引:概念与实用场景

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
简介: 本文介绍了 Hologres 索引的概念、类型及在实际场景中的应用。Hologres 是阿里云的一款强大数据库产品,其索引功能显著提升了数据查询性能。文章详细探讨了 B 树索引、哈希索引和位图索引的特点及应用场景,并介绍了索引的创建和维护方法。此外,还列举了 Hologres 中的重要参数设置及其使用限制,最后通过电商、金融、物流和社交媒体等领域的具体案例,展示了索引在不同场景下的实用价值。

一、引言

最近工作中,遇到holo索引相关问题,结合我们实际工作中的应用场景,以及对hologres的了解,写一篇文章记录下。

在当今数据驱动的时代,高效地管理和查询大规模数据是企业和开发者面临的关键挑战之一。Hologres作为阿里云一款强大的数据库产品,其索引功能在提升数据查询性能方面发挥着至关重要的作用。后面将深入探讨 hologres 索引的概念以及其在各种实际场景中的应用,同时介绍 hologres 中的一些重要参数设置,后续将以我们熟悉的电商平台举例应用。

二、hologres 索引的概念

(一)什么是索引

索引是一种数据结构,它可以帮助数据库系统快速定位和访问特定的数据行。在 hologres 中,索引就像是一本书的目录,图书馆每本书的位置,它记录了数据库表中数据的存储位置和关键信息,使得在查询数据时可以更快地找到满足条件的行,而不必扫描整个表,重在提高效率。

(二)hologres 索引的类型

  1. B 树索引
  • 特点:B 树是一种平衡的多路查找树,具有平衡结构,能够保持高效的查询性能。它适用于范围查询和精确匹配查询,可以快速定位到满足条件的数据范围。
  • 应用场景
  • 在电商平台的商品库存管理中,商品的库存数量可能随时变化,需要频繁进行范围查询以确定某个数量范围内的商品库存情况。例如,查询库存数量在 100 到 200 之间的商品,可以通过在库存数量列上创建 B 树索引,快速定位到满足条件的商品,提高查询效率。
  • 在金融风险管理中,对于交易时间的查询通常需要进行范围查询,以分析特定时间段内的交易情况。在交易表的交易时间列上创建 B 树索引,可以快速获取指定时间范围内的交易记录,帮助金融机构进行风险评估和监控。
  1. 哈希索引
  • 特点:哈希索引通过将索引列的值计算哈希值,然后将哈希值与数据行的存储位置关联起来。哈希索引适用于精确匹配查询,具有非常高的查询性能。
  • 应用场景
  • 在用户登录系统中,通常需要根据用户名和密码进行精确匹配查询以验证用户身份。在用户表的用户名和密码列上创建哈希索引,可以快速确定输入的用户名和密码是否正确,提高登录验证的速度。
  • 在物流管理系统中,运输单号通常是唯一的,需要进行精确查询以跟踪特定货物的运输状态。在货物表的运输单号列上创建哈希索引,可以快速定位到特定运输单号的货物信息,方便物流企业进行货物跟踪和管理。
  1. 位图索引
  • 特点:位图索引适用于低基数列(即列中取值较少的情况),它将每个可能的值映射到位图中的一个位,通过位运算可以快速判断哪些行满足查询条件。
  • 应用场景
  • 在电商平台的商品分类管理中,商品的分类通常是有限的几个类别,属于低基数列。在商品表的分类列上创建位图索引,可以快速查询特定分类的商品,提高商品分类查询的效率。
  • 在人力资源管理系统中,员工的性别、职位等列通常具有较低的基数。在员工表的性别、职位列上创建位图索引,可以快速查询特定性别的员工或特定职位的员工信息,方便人力资源部门进行人员统计和管理。

(三)索引的创建和维护

hologres 中,可以使用 SQL 语句创建索引。创建索引时需要指定索引列和索引类型。一旦索引创建成功,数据库系统会自动维护索引,确保索引与表中的数据保持一致。当表中的数据发生变化时,索引也会相应地进行更新。

三、hologres 中的参数说明

(一)列存表、行存表和行列共存表参数对比

参数

说明

列存表

行存表

行列共存表

建议值

建表后是否可修改

orientation

表存储格式

column(默认值)

row

row,column

column

否,如需修改请重新建表。

table_group

Table Group

默认为 default table group。

默认为 default table group。

默认为 default table group。

默认即可。

否,如需修改请重新建表或者 Resharding。

distribution_key

分布键

默认为主键,根据业务场景修改。

默认为主键。

默认为主键。

主键的子集,建议只选择一列。

否,如需修改请重新建表。

clustering_key

聚簇索引

默认为空。

默认为主键。

默认为空。

建议最多选择一列,且仅支持 asc 序。

否,如需修改请重新建表。

event_time_column

分段键

默认为第一个非空时间戳字段。

不支持。

默认为第一个非空时间戳字段。

建议时间戳字段。

否,如需修改请重新建表。

bitmap_columns

位图索引

按需使用。

不支持。

按需使用。

建议用于等值比较的列,一般 10 列以下。

是,详情请参见 ALTER TABLE。

dictionary_encoding_columns

比特编码

按需使用。

不支持。

按需使用。

建议低基数列,一般 10 列以下。

是,详情请参见 ALTER TABLE。

time_to_live_in_seconds

表数据生命周期

按需使用。

按需使用。

按需使用。

默认即可,无需设置。

是,详情请参见 ALTER TABLE。

(二)各参数详细解释

  1. orientation
  • 指定了数据库表在 Hologres 中的存储模式是列存还是行存,从 V1.1 版本开始支持行列共存的格式,命令语法如下所示。不同的存储格式适用于不同的查询场景,建表时默认为列存,其余存储模式需要建表时显式指定,详情请参见表存储格式:列存、行存、行列共存。
  • call set_table_property('table_name', 'orientation', '[column | row |row,column]');
  1. table_group
  • 在 Hologres 中,Shard 是指数据分片,Table Group 是 Hologres 中特有的逻辑存储概念,用于管理 Shard 数,一个 Table Group 唯一对应一组 Shard。新建数据库后,如果没有创建新的 Table Group,那么创建第一个表时,会自动建立一个名称为<db>_tg_default的默认 Table Group,后续表创建时没有指定 Table Group 将会被指定至默认 Table Group 中。一般情况下无需设置 Table Group,使用默认 Table Group 即可,当实例规格较大(大于 256 Core 时),建议根据业务情况划分不同的 Table Group 和 Shard 数,带来更好的性能,使用详情请参见 Table Group 与 Shard Count 操作指南。
  • call set_table_property('table_name', 'table_group', '[tableGroupName]');
  1. distribution_key
  • 设置分布键 Distribution Key。Distribution Key 指定了表的分布策略,数据根据 Distribution Key 被分配到各个 Shard 上,保证 Distribution Key 相同的记录会被分配到同一个 Shard 上。Distribution Key 是非常重要的分布式概念,合理的设置 Distribution Key 可以提高查询性能和 QPS 等,详情请参见分布键 Distribution Key。
  • call set_table_property('table_name', 'distribution_key', '[columnName[,...]]');
  1. clustering_key
  • 设置聚簇索引 Clustering Key,命令语法如下所示。Hologres 会根据 Clustering Key 在文件内对数据进行排序,默认为升序(acs)排序。合理地设置 Clustering Key 能够加速在索引列上的 Range 和 Filter 查询,提升查询性能,详情请参见聚簇索引 Clustering Key。
  • call set_table_property('table_name', 'clustering_key', '[columnName{:asc} [,...]]');
  1. event_time_column
  • 设置分段键 Event_time_column (原 Segment Key),命令语法如下所示。文件会根据 Event_time_column 划分,当命中 Event_time_column 时,可以快速定位到数据所在的文件,Event_time_column 适用于数据为单调递增或单调递减的有序字段,例如时间戳字段,非常适用于日志、流量等和时间强相关的数据,合理设置可极大提升查询性能,详情请参见 Event Time Column(Segment Key)。
  • call set_table_property('table_name', 'event_time_column', '[columnName [,...]]');
  1. bitmap_columns
  • 设置位图索引 Bitmap,命令语法如下所示。Bitmap 能够快速定位到符合条件数据所在的行号,适合将等值查询条件的数据设置为位图索引列。默认列存表所有 TEXT 数据类型的字段都会被隐式地设置为位图索引列,详情请参见位图索引 Bitmap。
  • call set_table_property('table_name', 'bitmap_columns', '[columnName{:[on|off]}[,...]]');
  1. dictionary_encoding_columns
  • 设置字典编码 Dictionary Encoding,命令语法如下所示。Dictionary Encoding 指定列的值构建字典映射。字典编码可以将字符串的比较转成数字的比较,加速 Group By、Filter 等查询。默认列存表所有 TEXT 数据类型的字段都会被设置为 Dictionary Encoding 列 ,在 Hologres V0.9 及之后版本,会根据数据特征自动选择是否创建字典编码。
  • call set_table_property('table_name', 'dictionary_encoding_columns', '[columnName{:[on|off|auto]}[,...]]');
  1. time_to_live_in_seconds(不建议使用)
  • 设置表的数据生命周期(TTL),单位为秒,命令语法如下所示。
  • TTL 过期时间是按照数据写入的时间开始计算,不是按照数据更新时间计算。不设置 TTL 的时候,默认为 100 年,Hologres 从 V1.3.24 版本开始,TTL 允许的最小值是一天,即 86400 秒。TTL 的详细使用说明请参见 SQL 命令列表。
  • TTL 不是精确的时间,即到期了之后数据会在某一段时间(不是固定时间)删除(只删除数据,表还会会存在),因此可能会出现 PK 重复的问题。生产业务不建议使用 TTL 来管理数据的生命周期,建议使用 CREATE PARTITION TABLE。
  • call set_table_property('table_name', 'time_to_live_in_seconds', '<non_negative_literal>');

(三)使用限制

支持将多个字段设置为 Primary Key(即复合主键),被设置为 Primary Key 的字段是唯一且非空,同时只能在一个语句里设置多列为表的 Primary Key。Primary Key 必须为 not nullable 的列或者列组合,不支持将 Float、Double、Numeric、Array、Json、Date 及其他复杂数据类型的字段设为 Primary Key。不支持修改 Primary Key。

四、hologres 索引的实用场景

(一)电商数据分析

  1. 商品搜索:在电商平台中,用户经常需要通过关键词搜索商品。通过在商品名称、描述等字段上创建索引,可以大大提高搜索的速度和准确性。例如,当用户输入 “红色连衣裙” 时,数据库可以快速定位到包含这些关键词的商品。
  2. 订单查询:电商平台需要处理大量的订单数据,商家和用户经常需要查询订单状态、订单金额等信息。在订单表的关键列上创建索引,可以快速响应这些查询请求。例如,在订单编号、用户 ID、订单状态等列上创建索引,可以快速查询特定用户的订单或特定状态的订单。
  3. 库存管理:电商平台需要实时掌握商品的库存情况,以便及时补货和处理订单。通过在库存表的商品 ID、库存数量等列上创建索引,可以快速查询特定商品的库存信息,提高库存管理的效率。

(二)金融风险管理

  1. 交易查询:金融机构需要对大量的交易数据进行查询和分析,以监控市场风险和客户交易行为。在交易表的交易时间、交易金额、交易对手等列上创建索引,可以快速查询特定时间段内的交易或特定交易对手的交易。
  2. 风险评估:金融机构需要根据客户的信用记录、交易历史等信息进行风险评估。通过在客户表的信用评分、交易次数、逾期次数等列上创建索引,可以快速查询客户的风险信息,提高风险评估的准确性和效率。
  3. 合规审计:金融机构需要遵守各种监管规定,进行合规审计。通过在交易表、客户表等关键表上创建索引,可以快速查询特定交易或客户的信息,满足合规审计的要求。

(三)物流管理系统

  1. 货物跟踪:物流企业需要实时跟踪货物的运输状态,以便及时向客户提供货物的位置信息。通过在货物表的运输单号、运输状态、当前位置等列上创建索引,可以快速查询特定货物的运输状态和位置信息。
  2. 路线规划:物流企业需要根据货物的重量、体积、目的地等信息进行路线规划,以提高运输效率和降低成本。通过在货物表的目的地、重量、体积等列上创建索引,可以快速查询特定目的地的货物信息,为路线规划提供数据支持。
  3. 仓库管理:物流企业需要管理大量的仓库,对货物的入库、出库、库存等信息进行管理。通过在仓库表的仓库编号、货物类型、库存数量等列上创建索引,可以快速查询特定仓库的货物信息和库存情况,提高仓库管理的效率。

(四)社交媒体分析

  1. 用户搜索:社交媒体平台上的用户经常需要搜索其他用户或话题。通过在用户表的用户名、用户简介等字段上创建索引,可以快速定位到特定用户。在话题表的话题名称、话题标签等字段上创建索引,可以快速搜索特定话题。
  2. 内容推荐:社交媒体平台需要根据用户的兴趣和行为为用户推荐内容。通过在用户表的兴趣标签、关注列表等列上创建索引,可以快速查询用户的兴趣信息,为内容推荐提供数据支持。
  3. 舆情监测:企业和政府机构可以利用社交媒体平台进行舆情监测,了解公众对特定事件或品牌的看法。通过在社交媒体帖子表的关键词、发布时间、用户 ID 等列上创建索引,可以快速查询特定关键词的帖子,分析舆情趋势。

五、总结

hologres 索引是提高数据库查询性能的重要工具。通过理解索引的概念和类型,以及掌握索引在不同场景中的应用,用户可以更好地利用 hologres 数据库,提高数据管理和分析的效率。同时,了解 hologres 中的参数设置,可以根据具体的业务需求进行合理的配置,进一步优化数据库性能。在实际应用中,用户应根据具体的业务需求和数据特点选择合适的索引类型,并合理地创建和维护索引,以确保数据库系统的性能和稳定性。

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
目录
相关文章
|
5月前
|
存储 运维 搜索推荐
实时数仓Hologres发展问题之Hologres在无人车送货场景中的应用如何解决
实时数仓Hologres发展问题之Hologres在无人车送货场景中的应用如何解决
56 2
|
2月前
|
运维 数据挖掘 网络安全
场景实践 | 基于Flink+Hologres搭建GitHub实时数据分析
基于Flink和Hologres构建的实时数仓方案在数据开发运维体验、成本与收益等方面均表现出色。同时,该产品还具有与其他产品联动组合的可能性,能够为企业提供更全面、更智能的数据处理和分析解决方案。
|
8月前
|
存储 数据库 文件存储
实时数仓 Hologres产品使用合集之建表字符串默认都是bitmap索引,如果字符串的是高基数的,会不会有影响
实时数仓Hologres是阿里云推出的一款高性能、实时分析的数据库服务,专为大数据分析和复杂查询场景设计。使用Hologres,企业能够打破传统数据仓库的延迟瓶颈,实现数据到决策的无缝衔接,加速业务创新和响应速度。以下是Hologres产品的一些典型使用场景合集。
141 9
|
4月前
|
存储 监控 算法
Hologres 在 BI 场景中的应用
【9月更文第1天】随着企业对实时数据分析的需求不断增加,传统的批处理方式已经无法满足现代业务决策的速度要求。Hologres,作为一款专为在线分析处理(OLAP)设计的实时数仓解决方案,提供了高性能的查询能力,能够支持大规模数据集的实时分析需求。本文将探讨 Hologres 在商业智能(BI)场景中的应用,包括如何集成 BI 工具以提供实时数据洞察,并加速决策过程。
83 3
|
5月前
|
存储 分布式计算 数据挖掘
实时数仓 Hologres 问题之适用于业务场景的实时数仓如何搭建
实时数仓 Hologres 问题之适用于业务场景的实时数仓如何搭建
|
6月前
|
存储 SQL OLAP
分析性能提升40%,阿里云Hologres流量场景最佳实践
分析性能提升40%,阿里云Hologres流量场景最佳实践
|
5月前
|
运维 监控 搜索推荐
Hologres的应用场景有哪些?
【8月更文挑战第24天】Hologres的应用场景有哪些?
92 2
|
5月前
|
存储 数据挖掘 大数据
深度解析Hologres计算资源配置:如何根据业务场景选择合适的计算类型?
【8月更文挑战第22天】Hologres是一款由阿里云提供的分布式分析型数据库,支持高效的大数据处理与分析。本文通过电商优化商品推荐策略的案例,介绍了Hologres中的计算组型与通用型配置。计算组型提供弹性扩展资源,适合大规模数据及高并发查询;通用型则适用于多数数据分析场景,具备良好计算性能。通过实例创建、数据加载、计算任务建立及结果查询的步骤展示,读者可理解两种配置的差异并根据业务需求灵活选择。
76 2
|
5月前
|
SQL 关系型数据库 专有云
实时数仓 Hologres产品使用合集之如何针对模糊匹配查询设置索引
实时数仓Hologres是阿里云推出的一款高性能、实时分析的数据库服务,专为大数据分析和复杂查询场景设计。使用Hologres,企业能够打破传统数据仓库的延迟瓶颈,实现数据到决策的无缝衔接,加速业务创新和响应速度。以下是Hologres产品的一些典型使用场景合集。
|
5月前
|
SQL 分布式计算 数据安全/隐私保护
实时数仓 Hologres产品使用合集之重建表的索引后,如何将数据导入新表
实时数仓Hologres是阿里云推出的一款高性能、实时分析的数据库服务,专为大数据分析和复杂查询场景设计。使用Hologres,企业能够打破传统数据仓库的延迟瓶颈,实现数据到决策的无缝衔接,加速业务创新和响应速度。以下是Hologres产品的一些典型使用场景合集。

相关产品

  • 实时数仓 Hologres