本章节主要为您介绍如何选择表格存储的查询方式以及索引常见组合方案。

是否需要使用索引

以下情况您可以不使用索引进行查询:

  • 如果基于主键和主键范围查询的功能已经可以满足业务需求,那么不需要建立索引。
  • 如果对某个范围内进行筛选,范围内数据量不大或者查询频率不高,可以使用Filter,不需要建立索引。
  • 如果是某种复杂查询,执行频率较低、对延迟不敏感,可以考虑通过DLA(数据湖分析)服务访问表格存储,使用SQL进行查询。

索引对比

  • 全局二级索引
    一个全局二级索引是一个索引表,类似于主表,其提供了另一种数据分布方式(另一种主键排序方式),索引表可支撑的数据规模与主表相同。一个索引对应一种查询条件,预先将符合查询条件的数据排列在一起,查询效率很高,适合固定维度的查询。
    说明 全局二级索引的主键设计也同样需要考虑散列问题。
  • 多元索引

    一个多元索引是一系列数据结构的组合,其中的每一列都支持建立倒排索引等结构,查询时可以按照其中任意一列进行排序。一个多元索引可以支持多种查询条件,不需要对不同查询条件建立多个多元索引。相比全局二级索引,还支持多条件组合查询、模糊查询、全文索引、地理位置查询等。如果查询需求过于多变,需要多组合查询,则适合使用多元索引。多元索引本质上是通过各种数据结构加快了数据的筛选过程,功能丰富,但在数据按照某种固定顺序读取这种场景上,效率不如全局二级索引。

    多元索引的查询效率与倒排链长度等因素相关,即查询性能与整个表的全量数据规模有关,在数据规模达到百亿行以上时,建议使用RoutingKey对数据进行分片,查询时也通过指定RoutingKey查询来减少查询涉及到的数据量。简而言之,查询灵活度和数据规模不可兼得。

    多元索引适合如下的一些场景:
    • 需要对查询做任意组合
    • 需要有or的查询,如X=a OR X=b的场景
    • 需要GEO地理位置查询
    • 需要对字符串分词查询
两种索引的对比如下表:
对比项 全局二级索引 多元索引
查询灵活度 只可使用创建索引时指定的索引组合进行查询。如需其他组合需创建新的索引表。 可对索引字段做任意组合查询。
查询性能 通过索引键可定位到对应的”分片“,性能佳。 需要查询所有的分片。
大范围扫描 支持,性能与表引擎一致。 支持,但性能低于表引擎及全局二级索引。
数据可见延迟 毫秒级。 秒级。
分词查询 不支持。 支持。
GEO地理位置查询 不支持。 支持。
数据一致性 最终一致。 最终一致。

常见索引组合方案

每个业务都希望具备丰富的查询功能,但是在数据规模很大的情况下,灵活的查询意味着成本。例如万亿行数据的规模,使用表引擎,成本低;建立多元索引,查询灵活,但费用非常高昂;全局二级索引成本较低,但是只适合固定维度的查询。

常见的超大规模数据都带有一些时间属性,例如大量设备产生的数据(监控数据)或者人产生的数据(消息、行为数据等),这类数据非常适合采用表格存储进行存储。针对这类数据建立索引的组合方案:
  • 对元数据表建立多元索引,全量数据表不建立索引或采用全局二级索引。
    • 元数据表可以是产生数据的主体表,例如设备信息表、用户信息表等。在时序模型中,产生数据的主体也可以认为是一个时间线,这条线会不断的产生新的点。
    • 表格存储的时序数据模型(Timestream)采用的也是类似的方式,对时序数据中的时间线建立一张表,专门用来记录时间线的元数据,每个时间线一行。时间线表建立多元索引,用来做时间线检索,而全量数据则不建立索引。在检索到时间线后,对某个时间线下的数据进行范围扫描,来读取这个时间线的数据。
  • 热数据建立多元索引,冷数据不建立索引或者采用全局二级索引。
    • 很多情况下仅需要对非常热的数据进行多种维度查询,对冷数据采取固定维度查询(全局二级索引)即可。冷热分离可以给业务提供更高的性价比。
    • 目前多元索引还不支持TTL,需要业务层区分热数据和冷数据。

专家服务

表格存储提供专业、免费的技术咨询服务,欢迎加入我们的钉钉讨论群(搜索钉钉群号”11789671“或群名称”表格存储技术交流群“)。