通过使用多元索引(Search Index)的多种高效的索引结构,可以解决大数据的复杂查询难题。

背景

表格存储的数据表是一种典型的分布式NoSQL数据结构,可以高效地支持大规模数据的存储和读写场景,例如监控数据、日志数据等场景。

为了满足用户的按照非主键列查询,多列的自由组合查询等复杂查询需求,表格存储在支持单行读、范围读等主键查询的同时,创新性的推出了多元索引。

多元索引基于倒排索引和列式存储,可以解决大数据的复杂查询难题,包括非主键列查询、全文检索、前缀查询、模糊查询、多字段自由组合查询、嵌套查询、地理位置查询等功能。

索引区别

表格存储在支持数据表的主键查询的基础上,还提供了全局二级索引(Global Secondary Index)和多元索引两种加速查询的索引结构。下表展示了三种索引的区别。

索引类型 原理 场景
数据表主键 数据表类似于一个巨大的Map,它的查询能力也就类似于Map,只能通过主键查询。 适用于可以确定完整主键(Key)或主键前缀(Key prefix)的场景。
全局二级索引 通过创建一张或多张索引表,使用索引表的主键列查询,相当于把数据表的主键查询能力扩展到了不同的列。 适用于能提前确定待查询的列,待查询列数量较少,且可以确定完整主键或主键前缀的场景。
多元索引 使用了倒排索引、BKD树、列存等结构,具备丰富的查询能力。 适用于除数据表主键和全局二级索引之外的其他所有查询和分析场景。
说明 索引对比的详情请参见TableStore索引功能详解

接口

多元索引目前提供通用查询接口(Search)和数据导出接口(ParallelScan)。

两种接口的功能大部分相同,但是ParallelScan接口为了提高某些方面的性能和吞吐能力舍弃了部分功能,详情如下。
接口 说明
Search 全功能查询接口,支持多元索引的所有功能点。
  • 查询功能 :非主键列查询、全文检索、前缀查询、模糊查询、多字段自由组合查询、嵌套查询、地理位置查询
  • 折叠(去重)
  • 排序
  • 统计聚合
  • 数据总行数
ComputeSplits+ParallelScan 多并发数据导出接口,支持多元索引中的查询功能,不支持排序、统计聚合等分析功能。

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

  • 查询功能:非主键列查询、全文检索、前缀查询、模糊查询、多字段自由组合查询、嵌套查询、地理位置查询
  • 单请求支持多并发查询

注意事项

  • 索引同步

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

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

  • 数据生命周期(TTL)

    多元索引目前不支持TTL功能,即不能对设置了TTL的数据表创建多元索引。

    当只需要保留一段时间内的数据且时间字段不需要更新时,可以通过按时间分表的方法实现数据生命周期功能。按时间分表的原理、原则和优点如下。
    • 原理:按照固定时间,例如“日”、“周”、“月”或者“年”分表,并为每个表建立一个多元索引,根据需要保留所需时间的数据表。

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

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

    • 原则:单表(单索引)大小不超过200亿行,建议不超过100亿行。当单表(单索引)大小不超过100亿行时,多元索引的查询性能最好。
    • 优点:
      • 通过保留数据表的个数调节数据存储时长。
      • 查询性能和数据量成正比,分表后每个表的数据大小有上限,查询性能更好,避免查询延迟太大或者超时。
  • 数据多版本

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

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

功能

多元索引可以解决大数据中复杂的查询问题,同时数据库、搜索引擎等其他系统也可以解决数据的查询问题。表格存储与数据库及搜索引擎等系统的主要区别如下。

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

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