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命令导入。