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

表格存储的表是一种典型的分布式NoSQL数据结构,可以高效地支持大规模数据的存储和读写场景,例如监控数据、日志数据等场景。但之前表格存储只支持主键查询,例如单行读、范围读等,其他类型的查询就很难支持,例如按照非主键列查询,多个列的自由组合查询等。

为了解决上述问题,表格存储创新性的推出了多元索引。多元索引基于倒排索引和列式存储,可以解决上述查询问题,包括但不限于:

  • 非主键列的条件查询
  • 多列的自由组合查询
  • 全文检索
  • 地理位置查询
  • 前缀查询
  • 模糊查询
  • 嵌套结构查询

索引区别

除了主表的主键查询,表格存储目前提供了两种加速查询的索引结构:全局二级索引(Global Secondary Index)、多元索引。下表展示了三种索引的区别:

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

注意事项

  • 索引同步

    用户为某个表创建了多元索引(Search Index),则后续写入这个表中的数据会先写入表中,写成功后会立即返回用户写成功,同时另一个异步线程会从表中读取新写入的数据然后写入多元索引。这个过程是一个异步过程。

    采用异步方式创建多元索引不会降低表格存储原有的写入能力。目前索引延迟在秒级别,大部分在10秒以内。在表格存储控制台可以实时查看索引创建的延迟情况。

  • TTL

    多元索引不支持TTL功能,如果原表开通了TTL,则不能创建多元索引。

  • 版本

    多元索引不支持多版本,如果原表开通了多版本,则不能创建多元索引。

    如果在单版本中自定义了每次写入的timestamp,且先写入大版本号,后写入小版本号,这时候先写入的大版本号的索引可能会被后写入的小版本号的索引覆盖。

功能

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

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