公司使用阿里的 TableStore(以下简称 TS) 已经有些日子了。这周仔细翻阅了一下 TableStore 的官方文档。现对 TableStore 做一些总结。
我们先来了解一下什么是 TableStore。表格存储(Table Store)是阿里云自研的 NoSQL 多模型数据库,提供海量结构化数据存储以及快速的查询和分析服务。表格存储的分布式存储和强大的索引引擎能够提供 PB 级存储、千万 TPS 以及毫秒级延迟的服务能力。
接下来我们来看看 TS 给我们提供了一些什么样的功能,以及这些功能对应的一些限制。
日常操作
我们首先来看看日常操作(增删改查)。对于日常操作,官方提供了单行操作和多行操作(批量操作)。对于批量操作,官方可能出于安全或者技术上的考虑,将很多操作都进行了数量的限制,这些限制会使得我们在编写代码时变得麻烦。
日常操作中需要注意的点如下:
1.更新和删除的操作都只能根据主键列进行。也就是如果你要更新或者删除某行数据,只能先查找出该行数据的主键,然后再根据该行主键去更新或删除。而无法直接通过某些组合的条件去做更新或删除的操作。
2.范围读操作时,一次操作请求读取的行数不能超过 5000 行(4 MB)。
3.批量读操作时,一次操作请求读取的行数不能超过 100 笔。
4.批量写操作时,一次操作请求写入行数不能超过 200 笔,数据大小不能超过 4 MB。同时,TS 无法保证批量操作一定都会执行成功,也就是如果 200 笔,有一笔失败了,你需要自己对失败的这笔数据进行处理。
5.在没有索引的情况下,查询表中数据的总行数是件非常麻烦的事情,需要使用范围读,自己去遍历查询。
接下来我们来看看 TS 提供的索引功能。TS 为我们提供了两种索引,一种是二元索引,一种是多元索引。二元索引类似于 MySQL 的索引,多元索引类似于 Solr 的索引。
二元索引
二元索引可以在指定列上建立索引,生成的索引表中数据按用户指定的索引列进行排序,主表的每一笔写入都将自动异步同步到索引表。在很多场景下,我们需要对表的属性列、或者非首列主键进行条件上的查询,这个时候就可以用到二元索引。
二元索引中需要注意的点如下:
1.查询时,如果需要返回的属性列不在索引表中,需要反查主表。相当于,我们需要对查询出来的数据,再做遍历,然后去主表中查询。实际使用起来还是挺麻烦的。
2.TS 的索引中暂时没有类似于 MySQL 的唯一索引的概念,如果你希望某一字段的值全局唯一,你只能将该字段设置为主键。
多元索引
多元索引支持以下三种索引方法。1.倒排索引:基于建立了倒排索引的属性列,可以实现多字段自由组合的 ad-hoc 查询。2.多维空间索引:表格存储基于多维空间索引提供了地理位置的查询能力。3.列式正排索引:可以更好地支持排序、统计聚合等功能。
基于上述三种基础索引能力,多元索引提供很多其他的索引功能。非主键列的查询、多字段自由组合查询、地理位置查询、排序等等,详情请见官网。另外在 TS 的控制台,可以直接下查询条件去测试这些索引的查询方法。
关于查询的功能,其实都挺好理解的,大家自己测试一下就可以知道大致的一些用法。这边有个稍微需要提一下的是,建立多元索引时,可以选择分词字符串,分词字符串又分为单字分词和多层语义分词。单字分词,中文会按字拆分,英文会按照空格拆分;多层语义分词会根据下划线拆分。官网暂时没有这两个分词规则的文档,是我自己测试后给出的定义,最终以官方文档为准。
收费
最后是关于收费的问题,我个人在这个方面也是比较困惑的,官方给的价格表不是很好理解。查看最近的消费明细,一个多元索引,每个小时费用是0.05元。给大家做个参考。
关于本文提到的一些限制,都是通过官网文档或个人测试后得到的结果,大家最终以官方最新文档为准。如果有不准确的地方,欢迎大家指出。
参考文档:
https://help.aliyun.com/document_detail/91524.html?spm=a2c4g.11186623.6.916.13203d76r16QMK
https://help.aliyun.com/product/27278.html?spm=a2c4g.11186623.6.540.39041b82N7FXbs