Client 常见问题

关于select

在包括3.55.0版本以上,select的语法是类SQL的,where语句支持各样的过滤条件,client能够分析条件表达式,决策选择不一样的请求进行查询,

  • 优先匹配主键,即条件表达式包含主键时,使用主键查询
  • 次优先匹配本地索引
  • 如果表配置了全局索引,再匹配全局索引
  • 以上都不匹配的话,则全表遍历,此时select和dump是等价的

字符串转义

字符串支持 类C语言 风格的字符转义,如 \\, \t, \"等。

关于TDR表的数据修改

TDR表的SDK中,Record的数据写入支持两种方式

  • SetData,整个记录打包写入,TcaplusDB存储依赖于tdr表定义,能够解析和理解Data中的内容
  • SetValue,逐个设置一级字段,再打包写入,TcaplusDB不理解一级字段中的嵌套内容,如box.title

SetData应该和GetData配套使用,SetValue应该和GetValue配套使用。

默认地,client的insert、replace、update使用SetValue写入数据,对应地select使用GetValue查询输出各个一级字段数据,而语句中使用 using tdr 关键字可以使用SetData和GetData。

关于条件过滤

在包括3.55.0版本以上,select、update、delete均支持条件过滤,见详细语法,要求条件表达式必须包含主键。

注意,对于TDR表,条件过滤依赖于TDR的格式解析,当条件表达式包含嵌套字段时,如 WHERE key1=1 AND box.title="tcaplus",要求数据必须是SetData写入的,SetValue写入的数据无法被解析。

关于全表遍历

全表遍历(dump)较为低效,且对在线业务有一定的影响,对于在线业务,数据量较大的表,请谨慎使用。

全表遍历默认是在slave副本上遍历的,注意比如dump命令导的过程中插入新的数据不会导出。

关于数据导出和导出

目前支持的数据格式是csv,其中对于TDR表,语句中使用 using tdr 关键字时,则的是xml格式tdr文件

若表存在复杂类型的字段(数组、结构体)

  • TDR表,csv文件中以0x前缀的16进制表示
  • PB表,csv文件中以json字符串表示

当使用select into导出数据时,导出文件可能包含不止一条记录(因为不一定是全主键查询),而目前insert into、replace into只支持导入一条记录,多条记录需对应地使用load命令导入。

results matching ""

    No results matching ""