多元索引介绍

多元索引(Search Index)基于倒排索引和列式存储,可以解决大数据的多维查询和统计分析难题。当日常业务中有非主键列查询、多列组合查询、模糊查询、全文检索和向量检索等复杂查询需求以及求最值、统计行数、数据分组等数据分析需求时,您可以将这些属性作为多元索引中的字段并使用多元索引查询与分析数据。

背景信息

多元索引可以解决大数据中复杂的查询问题,同时数据库、搜索引擎等其他系统也可以解决数据的查询问题。

表格存储与数据库及搜索引擎等系统的主要区别如下:

除了Join、事务和相关性外,表格存储能覆盖数据库和搜索系统中的其他功能,同时具备数据库的数据高可靠性和搜索系统的高级查询能力,可以替换常见的数据库 + 搜索系统组合架构方式。如果您的使用场景中不需要Join、事务和复杂相关性时,您可以选择使用表格存储多元索引。

表格存储与数据库及搜索系统的主要的区别

索引介绍

多元索引基于倒排索引和列式存储,可以解决大数据的多维数据查询和统计分析难题,包括非主键列查询、前缀查询、模糊查询、多字段自由组合查询、嵌套查询、地理位置查询、全文检索、向量检索和统计聚合(max、min、count、sum、avg、distinct_count、group_by、percentileshistogram)等功能。

下图展示了多元索引采用的倒排索引和列式存储的原理以及多维空间索引结构。

image.png

多元索引的使用方式不同于MySQL等传统数据库的索引使用方式,无最左匹配原则的限制,使用时非常灵活。一般情况下一张表只需要创建一个多元索引即可。例如有一个学生表,包括姓名、学号、性别、年级、班级、家庭住址等列,如果要实现姓名等于张三且年级为三年级的学生家庭住址在附近1公里内且性别为男的学生找出三年级二班住在某小区的学生等任意条件的组合查询,您可以创建一个多元索引实现,在创建多元索引时,将这些列添加到同一个多元索引中即可。

表格存储为数据表提供了数据表主键查询方式,还提供了二级索引(Secondary Index)和多元索引两种加速查询的索引结构。下表展示了三种查询方式的区别。

说明

使用合适的索引能大幅提升数据查询效率以及降低使用成本,建议您参考索引选择多元索引最佳实践进行索引选择和设计。

查询方式

原理

场景

数据表主键

数据表类似于一个巨大的Map,它的查询能力也就类似于Map,只能通过主键查询。

适用于可以确定完整主键(Key)或主键前缀(Key prefix)的场景。

二级索引

通过创建一张或多张索引表,使用索引表的主键列查询,相当于把数据表的主键查询能力扩展到了不同的列。

适用于能提前确定待查询的列,待查询列数量较少,且可以确定完整主键或主键前缀的场景。

多元索引

使用了倒排索引、BKD树、列存等结构,具备丰富的查询能力。

适用于除数据表主键和二级索引之外的其他所有查询和分析场景,例如非主键列的条件查询、任意列的自由组合查询、关系查询、全文检索、地理位置查询、前缀查询、模糊查询、嵌套结构查询、Null值查询、统计聚合等。

典型场景

多元索引可广泛应用于各类应用系统中进行数据查询与分析。多元索引的实际应用场景包括但不限于下表的样例场景。

应用系统

样例场景

电商平台

在电商平台中使用多元索引实现商品的分类、属性筛选等功能,方便用户进行快速的商品搜索和筛选。

社交应用

在社交网络中使用多元索引实现用户的关注关系、好友关系等查询以及根据用户的兴趣标签进行推荐和匹配。

日志分析

在日志分析场景中使用多元索引进行日志的关键字搜索、按照时间范围查询等操作,用于快速定位问题和分析日志数据。

物联网数据分析

在物联网场景中使用多元索引进行设备数据的查询和分析,例如按照设备类型、地理位置等进行筛选和统计。

应用性能监控

在应用性能监控中使用多元索引进行指标数据的聚合和查询,例如按照时间范围、应用名称等进行筛选和汇总。

地理位置服务

在地理位置服务中使用多元索引进行地理位置的查询和附近搜索,用于提供附近的店铺、景点、服务等信息。

文本搜索引擎

在文本搜索引擎中使用多元索引进行全文检索和相关性排序,用于快速搜索和查找文档、文章等信息。

核心功能

多元索引的核心功能主要包括:

  • 数据库查询加速:

    • 任意列查询(包括主键列和非主键列)

    • 多字段自由组合查询

    • 地理位置查询

    • And、Or、NotNull等查询

    • In 查询

    • 模糊查询(WildcardQuery、PrefixQuery、SuffixQuery)

    • 嵌套查询(NestedQuery)

    • 排序

    • 翻页

  • 统计聚合(Max、Min、Sum、Avg、Count、DistinctCount、Percentile、Histogram、GroupBy等)

  • 全文检索

  • 向量检索

  • 数据快速筛选

更多信息,请参见多元索引功能

容灾能力

多元索引在具备同城容灾的区域默认提供同城冗余的容灾能力,会将数据同时存储到多个不同的可用区,在单可用区遇到断电、断网或者火灾等各种故障时均不会影响读写可用性,保障数据的正常读写服务。当前多元索引支持同城冗余的区域包括华北2(北京)、华东2(上海)、华东1(杭州)、华南1(深圳)、华北3(张家口)、华北6(乌兰察布)、中国香港、日本(东京)、印度尼西亚(雅加达)、新加坡、德国(法兰克福)等。

在上述支持同城冗余的区域内,多元索引已经完成所有存量索引的同城冗余升级,当前存量索引和未来新建索引都默认支持同城冗余。更多信息,请参见同城冗余

使用限制

更多信息,请参见多元索引限制

注意事项

重要

使用多元索引时,无需为数据表设置预定义列。

  • 适用模型

    多元索引只适用于宽表模型

  • 索引同步

    用户为数据表创建了多元索引后,当在数据表中写入数据时,数据会先写入数据表中,数据写成功后会立即返回用户写成功,同时另一个异步线程会从数据表中读取写入的数据然后写入到多元索引,采用异步方式创建多元索引不会降低表格存储的写入能力。

    目前多元索引的延迟大部分在3秒以内,通过表格存储控制台可以实时查看多元索引创建的延迟情况。

  • 数据生命周期(TTL)

    如果数据表无UpdateRow更新写入操作,则您可以使用多元索引TTL。更多信息,请参见生命周期管理

    当只需要保留一段时间内的数据且时间字段不需要更新时,您可以通过按时间分表的方法实现数据生命周期功能。按时间分表的原理、原则和优点请参见下表说明。

    维度

    按时间分表

    原理

    按照固定时间,例如“日”、“周”、“月”或者“年”分表,并为每个表建立一个多元索引,根据需要保留所需时间的数据表。

    例如当数据需要保留6个月时,可以将每个月的数据保存在一张数据表中,例如table_1、table_2、table_3、table_4、table_5、table_6,并为每个数据表创建一个多元索引,每个数据表和多元索引中只会保存一个月的数据,只需要每个月把6个月前的数据表删除即可。

    当使用多元索引查询数据时,如果时间范围在某个表中,只需要查询对应表;如果时间范围在多个表中,需要对涉及的数据表均查询一次,再将查询结果合并。

    原则

    单表(单索引)大小不超过500亿行,当单表(单索引)大小不超过200亿行时,多元索引的查询性能最好。

    优点

    • 通过保留数据表的个数调节数据存储时长。

    • 查询性能和数据量成正比,分表后每个表的数据大小有上限,查询性能更好,避免查询延迟太大或者超时。

  • 数据多版本

    多元索引不支持数据多版本,即不能对设置了数据多版本的数据表创建多元索引。

    当在单版本中每次写入数据时自定义了timestamp,且先写入版本号较大的数据,后写入版本号较小的数据,此时先写入的版本号较大的数据可能会被后写入的版本号较小的数据覆盖。

    SearchParallelScan请求的结果数据中不一定包括timestamp属性。

接口说明

多元索引提供了多元索引管理接口和查询接口。其中查询接口包括通用查询接口(Search)和数据导出接口(ParallelScan),两种查询接口的功能大部分相同,但是ParallelScan接口为了提高某些方面的性能和吞吐能力舍弃了部分功能。

分类

接口

描述

管控接口

CreateSearchIndex

创建一个多元索引。

DescribeSearchIndex

获取多元索引的详细描述信息。

ListSearchIndex

列出多元索引的列表。

DeleteSearchIndex

删除某个多元索引。

查询接口

Search

全功能查询接口,支持多元索引的所有功能点,包括所有的查询功能以及排序、统计聚合等分析能力,其结果会按照指定的顺序返回。

  • 查询功能:非主键列查询、全文检索、前缀查询、列存在性查询、模糊查询、多条件组合查询、嵌套查询、地理位置查询

  • 折叠(去重)

  • 排序

  • 统计聚合

  • 数据总行数

ParallelScan

多并发数据导出接口,只包括所有的查询功能,舍弃了排序、统计聚合等分析能力,能将命中的数据以更快的速度全部返回。

相对于Search接口,ParallelScan可以提供更好的性能,单并发时性能(吞吐能力)是Search接口的5倍。

  • 查询功能:非主键列查询、全文检索、前缀查询、列存在性查询、模糊查询、多条件组合查询、嵌套查询、地理位置查询

  • 单请求支持多并发查询

多并发导出数据时,您还需要通过ComputeSplits接口获取当前ParallelScan单个请求的最大并发数。

使用流程

image

步骤

操作

说明

1

为数据表创建多元索引

在数据表上创建一个多元索引后,您可以根据多元索引中建立索引的字段来查询数据表中的数据。

2

使用多元索引查询数据

多元索引提供了全匹配查询匹配查询短语匹配查询精确查询多词精确查询前缀查询范围查询通配符查询多条件组合查询嵌套类型查询地理距离查询地理长方形范围查询地理多边形范围查询列存在性查询折叠(去重)等数据查询功能,请根据实际查询场景选择。

使用多元索引查询数据时支持通过配置分词指定匹配词的切分方式以及对满足条件的数据进行排序和翻页。更多信息,请参见分词排序和翻页

3

使用多元索引分析数据

如果要分析表中数据,您可以使用统计聚合功能实现求最小值、求最大值、求和、求平均值、统计行数、去重统计行数、百分位统计、按字段值分组、按范围分组、按地理位置分组、按过滤条件分组、直方图统计、日期直方图统计等数据分析功能。

4

使用多元索引导出数据

当使用场景中不关心整个结果集的顺序时,您可以使用并发导出数据功能以更快的速度将命中的数据全部返回。

使用方式

您可以通过控制台、命令行工具或者SDK使用多元索引。

计费说明

表格存储支持VCU模式(原预留模式)和CU模式(原按量模式)两种计费模式,请根据所用的实例模型参考相应计费模式了解多元索引计费信息。更多信息,请参见计费概述

  • VCU模式(原预留模式):计费项包括计算能力、数据存储量和外网下行流量,其中数据存储量包括高性能存储、容量型存储和多元索引存储。

    使用多元索引时,索引数据量占用的存储空间为多元索引存储,通过多元索引查询与分析数据会消耗计算资源。

  • CU模式(原按量模式):多元索引计费项包括读吞吐量、数据存储量和外网下行流量,其中读吞吐量包括预留读吞吐量和按量读吞吐量。更多信息,请参见多元索引计量计费

常见问题

相关文档

  • 如果要使用SQL查询与分析数据,您可以使用表格存储的SQL查询功能实现。更多信息,请参见SQL查询

    说明

    您也可以通过MaxCompute、Spark、Hive或者HadoopMR、函数计算、Flink等计算引擎分析表格存储中的数据。更多信息,请参见计算与分析概述

  • 基于多元索引可以实现搭建亿量级店铺搜索系统等方案。更多方案介绍,请参见多元索引实践

  • 表格存储控制台提供了多元索引相关电商订单、店铺搜索、地理围栏和智能元数据的场景Demo。具体样例请参见场景Demo