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 中的参数设置,可以根据具体的业务需求进行合理的配置,进一步优化数据库性能。在实际应用中,用户应根据具体的业务需求和数据特点选择合适的索引类型,并合理地创建和维护索引,以确保数据库系统的性能和稳定性。

目录
相关文章
|
4天前
|
存储 运维 安全
云上金融量化策略回测方案与最佳实践
2024年11月29日,阿里云在上海举办金融量化策略回测Workshop,汇聚多位行业专家,围绕量化投资的最佳实践、数据隐私安全、量化策略回测方案等议题进行深入探讨。活动特别设计了动手实践环节,帮助参会者亲身体验阿里云产品功能,涵盖EHPC量化回测和Argo Workflows量化回测两大主题,旨在提升量化投研效率与安全性。
云上金融量化策略回测方案与最佳实践
|
6天前
|
人工智能 自然语言处理 前端开发
从0开始打造一款APP:前端+搭建本机服务,定制暖冬卫衣先到先得
通义灵码携手科技博主@玺哥超carry 打造全网第一个完整的、面向普通人的自然语言编程教程。完全使用 AI,再配合简单易懂的方法,只要你会打字,就能真正做出一个完整的应用。
6075 18
|
18天前
|
人工智能 自动驾驶 大数据
预告 | 阿里云邀您参加2024中国生成式AI大会上海站,马上报名
大会以“智能跃进 创造无限”为主题,设置主会场峰会、分会场研讨会及展览区,聚焦大模型、AI Infra等热点议题。阿里云智算集群产品解决方案负责人丛培岩将出席并发表《高性能智算集群设计思考与实践》主题演讲。观众报名现已开放。
|
10天前
|
自然语言处理 数据可视化 API
Qwen系列模型+GraphRAG/LightRAG/Kotaemon从0开始构建中医方剂大模型知识图谱问答
本文详细记录了作者在短时间内尝试构建中医药知识图谱的过程,涵盖了GraphRAG、LightRAG和Kotaemon三种图RAG架构的对比与应用。通过实际操作,作者不仅展示了如何利用这些工具构建知识图谱,还指出了每种工具的优势和局限性。尽管初步构建的知识图谱在数据处理、实体识别和关系抽取等方面存在不足,但为后续的优化和改进提供了宝贵的经验和方向。此外,文章强调了知识图谱构建不仅仅是技术问题,还需要深入整合领域知识和满足用户需求,体现了跨学科合作的重要性。
|
6天前
|
人工智能 容器
三句话开发一个刮刮乐小游戏!暖ta一整个冬天!
本文介绍了如何利用千问开发一款情侣刮刮乐小游戏,通过三步简单指令实现从单个功能到整体框架,再到多端优化的过程,旨在为生活增添乐趣,促进情感交流。在线体验地址已提供,鼓励读者动手尝试,探索编程与AI结合的无限可能。
|
1月前
|
存储 人工智能 弹性计算
阿里云弹性计算_加速计算专场精华概览 | 2024云栖大会回顾
2024年9月19-21日,2024云栖大会在杭州云栖小镇举行,阿里云智能集团资深技术专家、异构计算产品技术负责人王超等多位产品、技术专家,共同带来了题为《AI Infra的前沿技术与应用实践》的专场session。本次专场重点介绍了阿里云AI Infra 产品架构与技术能力,及用户如何使用阿里云灵骏产品进行AI大模型开发、训练和应用。围绕当下大模型训练和推理的技术难点,专家们分享了如何在阿里云上实现稳定、高效、经济的大模型训练,并通过多个客户案例展示了云上大模型训练的显著优势。
|
10天前
|
Cloud Native Apache 流计算
PPT合集|Flink Forward Asia 2024 上海站
Apache Flink 年度技术盛会聚焦“回顾过去,展望未来”,涵盖流式湖仓、流批一体、Data+AI 等八大核心议题,近百家厂商参与,深入探讨前沿技术发展。小松鼠为大家整理了 FFA 2024 演讲 PPT ,可在线阅读和下载。
3551 10
PPT合集|Flink Forward Asia 2024 上海站
|
3天前
|
弹性计算 运维 监控
阿里云云服务诊断工具:合作伙伴架构师的深度洞察与优化建议
作为阿里云的合作伙伴架构师,我深入体验了其云服务诊断工具,该工具通过实时监控与历史趋势分析,自动化检查并提供详细的诊断报告,极大提升了运维效率和系统稳定性,特别在处理ECS实例资源不可用等问题时表现突出。此外,它支持预防性维护,帮助识别潜在问题,减少业务中断。尽管如此,仍建议增强诊断效能、扩大云产品覆盖范围、提供自定义诊断选项、加强教育与培训资源、集成第三方工具,以进一步提升用户体验。
615 242
|
23天前
|
人工智能 自然语言处理 前端开发
100个降噪蓝牙耳机免费领,用通义灵码从 0 开始打造一个完整APP
打开手机,录制下你完成的代码效果,发布到你的社交媒体,前 100 个@玺哥超Carry、@通义灵码的粉丝,可以免费获得一个降噪蓝牙耳机。
5957 16
|
5天前
|
消息中间件 人工智能 运维
12月更文特别场——寻找用云高手,分享云&AI实践
我们寻找你,用云高手,欢迎分享你的真知灼见!
509 37

热门文章

最新文章