【TcaplusDB知识库】TcaplusDB全局索引介绍

索引说明

TcaplusDB支持两种形式的索引:本地索引和全局索引。

  • 本地索引:基于TcaplusDB主键字段建立的索引,在建表时随表一起建立。
  • 全局索引:基于TcaplusDB表一级字段(包括主键字段和非主键字段)建立的索引。

通过本地索引和全局索引,用户可方便利用索引进行数据查询。优势:

  • 基于本地索引查询,可以满足用户通过部分主键字段进行索引查询
  • 基于全局索引,可以满足用户通过任意一级字段进行多种形式查询,如范围、模糊、聚合、分页等。

全局索引

介绍

全局索引,顾名思义,就是tcaplus与索引系统之间是相互独立的,通过异步同步的方式,将tcaplus中的数据同步到索引系统,因此,全局索引是一个准实时索引系统,即进行索引查询时,tcaplus表中新更新的数据无法实时查询出来,正常情况下,新更新的数据到能够通过索引查询出来的时延为秒级,大部分情况是1秒之内;

全局索引目前只支持对generic表建立索引,并且只支持表的一级字段(包括key字段和value字段)建立索引;并且也只支持简单类型建立索引,支持的类型包括:int8, uint8, int16, uint16, int32, uint32, int64, uint64, float, double, string(字符串); 对于pb表的bool和enum类型也支持,当pb表字段定义为string类型,如果该字段存储的是二进制,那么查询结果可能会不符合预期;对于uint64类型,如果值大于int64的最大值,查询结果将不符合预期,因此,如果该字段值会超过int64的最大值,建议不要为该字段建立索引;

tcaplus支持动态创建和修改索引,业务可以随时增加或删除或者修改全局索引,修改全局索引时,比如增加了一个索引字段,不会影响业务对修改前的全局索引查询;

tcaplus与全局索引之间的架构如下图所示:

img

创建

创建或者修改全局索引,需要在页面上进行申请,进入oms页面,点击 “业务管理” ---- > “表管理” ---- > 选择要创建全局索引的表,拉到最右侧,如下图:

img

点击 “索引”,进入到索引配置页面,在该页面勾上要建立索引的字段,然后点击“确认创建索引”按钮,这样就生成了创建全局索引的申请单,dba审核之后,会生成一个创建全局索引的事务,当事务执行成功后,该索引就可以被访问了。

数据同步

数据同步,是指tcaplus数据同步到索引系统,两者之间的数据是最终一致的,数据同步架构如下图所示:

img

索引查询

tcaplus提供sql查询语句进行索引查询,其中,sql查询条件中的字段必须是建立了全局索引的字段,另外,如果是聚合查询,那么聚合查询的字段也必须是建立了全局索引的字段;

一个索引查询请求,当前限制最多返回3000条记录;

支持的sql查询语句

条件查询

支持 =, >, >=, <, <=, !=, between, in, not in, like, not like, and, or , 比如:

select * from table where a > 100 and b < 1000;
 
select * from table where a between 1 and 100 and b < 1000;
 
select * from table where str like "test";
 
select * from table where a > 100 or b < 1000;

注意:between查询时,between a and b,对应的查询范围为[a, b],比如 between 1 and 100, 是会包含1和100这两个值的,即查询范围为[1,100]

注意:like查询是支持模糊匹配,其中"%"通配符,匹配0个或者多个字符; “_”通配符,匹配1个字符;

分页查询

支持limit offset分页查询,比如:

select * from table whre a > 100 limit 100 offset 0;

注意:当前limit必须与offset搭配使用,即不支持limit 1 或者 limit 0,1这种;

聚合查询

当前支持的聚合查询包括:sum, count, max, min, avg,比如:

select sum(a), count(*), max(a), min(a), avg(a) from table where a > 1000;

注意:聚合查询不支持limit offset,即limit offset 不生效;

注意:目前只有count支持distinct,即 select count(distinct(a)) from table where a > 1000; 其他情况均不支持distinct

部分字段查询

支持查询部分字段的值,比如:

select a, b from table where a > 1000;

对于pb表,还支持查询嵌套字段的值,类似:

select field1.field2.field3, a, b from table where a > 1000;

不支持的sql查询语句

不支持聚合查询与非聚合查询混用

select *, a, b from table where a > 1000;
 
select sum(a), a, b from table where a  > 1000;
 
select count(*), * from table where a  > 1000;

不支持order by查询

select * from table where a > 1000 order by a;

不支持group by查询

select * from table where a > 1000 group by a;

不支持having查询

select sum(a) from table where  a > 1000 group by a having sum(a) > 10000;

不支持多表联合查询

select * from table1 where table1.a > 1000 and table1.a = table2.b;

不支持嵌套select查询

select * from table where a > 1000 and b in (select b from table where b < 5000);

不支持别名

select sum(a) as sum_a from table where a > 1000;

不支持的其他查询

  • 不支持join查询;
  • 不支持union查询;
  • 不支持类似 select a+b from table where a > 1000 的查询;
  • 不支持类似 select * from table where a+b > 1000 的查询;
  • 不支持类似 select * from table where a >= b 的查询;
  • 不支持其他未提到的查询。

索引查询流程

img

索引使用方式

tcaplus_client客户端工具

tcaplus_client工具支持全局索引查询,查询命令直接使用sql查询语句进行查询即可,使用help select 命令可以获取相关查询命令。注意tcaplusdb_client使用版本,目前最新的支持3.46.0。

C++ SDK

C++ SDK 已集成相关全局二级索引API,在示例代码中也有相关实现,具体请参考:

# C++ TDR SDK 全局二索引示例路径TcaplusServiceApiXXX/release/x86_64/examples/tcaplus/C++_tdr1.0_syncmode_generic_simpletable/SingleOperation/globle_index_query#C++ PB SDK全局全局索引示例路径TcaplusPbApiXXX/release/x86_64/examples/tcaplus/C++_pb2_coroutine_simpletable/SingleOperation/global_index_query

img

TcaplusDB是腾讯出品的分布式NoSQL数据库,存储和调度的代码完全自研。具备缓存+落地融合架构、PB级存储、毫秒级时延、无损水平扩展和复杂数据结构等特性。同时具备丰富的生态、便捷的迁移、极低的运维成本和五个九高可用等特点。客户覆盖游戏、互联网、政务、金融、制造和物联网等领域。

猜你喜欢

转载自blog.csdn.net/weixin_44545651/article/details/121476015