【TcaplusDB知识库】Tcaplus Go SDK手册(二)
4 接口列表
支持命令:
//Generic表插入请求
TcaplusApiInsertReq = 0x0001
//Generic表替换/插入请求
TcaplusApiReplaceReq = 0x0003
//Generic表增量更新请求
TcaplusApiIncreaseReq = 0x0005
//Generic表单条查询请求
TcaplusApiGetReq = 0x0007
//Generic表删除请求
TcaplusApiDeleteReq = 0x0009
//Generic表删除应答
TcaplusApiDeleteRes = 0x000a
//Generic表更新请求
TcaplusApiUpdateReq = 0x001d
//List表查询所有元素请求
TcaplusApiListGetAllReq = 0x000b
//Generic表批量查询请求
TcaplusApiBatchGetReq = 0x0017
//Generic表按索引查询请求
TcaplusApiGetByPartkeyReq = 0x0019
//Generic表按索引更新请求
TcaplusApiUpdateByPartkeyReq = 0x004d
//Generic表按索引删除请求
TcaplusApiDeleteByPartkeyReq = 0x004f
4.1 Client接口
4.1.1 创建tcaplus client
/**
@brief 创建一个tcaplus api客户端
@retval 返回客户端指针
**/
func NewClient() *Client
4.1.2 日志配置接口
创建client之后,立刻调用
/**
@brief 设置API日志配置文件全路径log.conf(json格式,example下有示例),请在client.Dial之前调用
@param [IN] cfgPath 日志配置文件全路径log.conf
@retval 错误码
@note Api日志默认使用的zap,用户也可自行实现日志接口logger.LogInterface,调用SetLogger进行设置
**/
func (c *Client) SetLogCfg(cfgPath string) error
/**
@brief 自定义API日志接口,用户实现logger.LogInterface日志接口,日志将打印到用户的日志接口中,请在client.Dial之前调用
@param [IN] handle logger.LogInterface类型的日志接口
@retval 错误码
**/
func (c *Client) SetLogger(handle logger.LogInterface)
4.1.3 连接tcaplus接口
/**
@brief 连接tcaplue函数
@param [IN] appId appId,在网站注册相应服务以后,你可以得到该appId
@param [IN] zoneList 需要操作表的区服ID列表,操作的表在多个不同的zone,填zoneId列表;操作的表在一个zone,zone列表填一个zoneId
@param [IN] signature 签名/密码,在网站注册相应服务以后,你可以得到该字符串
@param [IN] dirUrl 目录服务器的url,形如"tcp://172.25.40.181:10600"
@param [IN] timeout second, 连接所有表对应的tcaplus proxy服务器。若所有的proxy连通且鉴权通过,则立即返回成功;
若到达超时时间,只要有一个proxy连通且鉴权通过,也会返回成功;否则返回超时错误。
@retval 错误码
**/
func (c *Client) Dial(appId uint64, zoneList []uint32, dirUrl string, signature string, timeout uint32) error
4.1.4 创建tcaplus请求
/**
@brief 创建指定分区指定表的tcaplus请求
@param [IN] zoneId 区服ID
@param [IN] tableName 表名
@param [IN] cmd 命令字(cmd包中cmd.TcaplusApiGetReq等)
@retval request.TcaplusRequest tcaplus请求
@retval error 错误码
*/
func (c *Client) NewRequest(zoneId uint32, tableName string, cmd int) (request.TcaplusRequest, error)
4.1.5 发送tcaplus请求
/**
@brief 发送tcaplus请求
@param [IN] req tcaplus请求
@retval error 错误码
*/
func (c *Client) SendRequest(req request.TcaplusRequest) error
4.1.6 异步接收tcaplus响应
/**
@brief 异步接收tcaplus响应
@retval response.TcaplusResponse tcaplus响应
@retval error 错误码
error nil,response nil 成功但当前无响应消息
error nil, response 非nil,成功获取响应消息
error 非nil,接收响应出错
*/
func (c *Client) RecvResponse() (response.TcaplusResponse, error)
4.1.7 发送tcaplus同步请求并接受响应
/**
@brief 发送tcaplus同步请求并接受响应
@param [IN] req tcaplus请求
@param [IN] timeout 超时时间
@retval response.TcaplusResponse tcaplus响应
@retval error 错误码
error nil,response nil 成功但当前无响应消息
error nil, response 非nil,成功获取响应消息
error 非nil,接收响应出错
**/
func (c *Client) Do(req request.TcaplusRequest, timeout time.Duration) (response.TcaplusResponse, error)
4.2 TcaplusRequest接口
4.2.1 添加记录
/**
@brief 向请求中添加一条记录。
@param [IN] index 用于List操作(目前不支持),通常>=0,表示该Record在所属List中的Index;对于Generic操作,index无意义,设0即可
@retval record.Record 返回记录指针
@retval error 错误码
**/
AddRecord(index int32) (*record.Record, error)
4.2.2 设置请求异步ID
/**
@brief 设置请求的异步事务ID,api会将其值不变地通过对应的响应消息带回来
@param [IN] asyncId 请求对应的异步事务ID
**/
SetAsyncId(id uint64)
4.2.3 设置版本校验规则
/**
@brief 设置记录版本的检查类型,用于乐观锁
@param [IN] type 版本检测类型,取值可以为(policy包中):
CheckDataVersionAutoIncrease: 表示检测记录版本号,只有当record.SetVersion函数传入的参数version的值>0,并且版本号与服务器端的版本号相同时,请求才会成功同时在服务器端该版本号会自增1;如果record.SetVersion的version <=0,则仍然表示不关心版本号
NoCheckDataVersionOverwrite: 表示不检测记录版本号。当record.SetVersion函数传入的参数version的值>0,覆盖服务端的版本号;如果record.SetVersion的version <=0,则仍然表示不关心版本号
NoCheckDataVersionAutoIncrease: 表示不检测记录版本号,将服务器端的数据记录版本号自增1,若服务器端新写入数据记录则新写入的数据记录的版本号为1
@retval error 错误码
@note 此函数适合Replace, Update操作
**/
SetVersionPolicy(p uint8) error
4.2.4 设置响应标志
/**
@brief 设置响应标志。主要用于Generic表的insert、replace、update、delete操作。
@param [IN] flag 请求标志:
0表示: 只需返回操作执行成功与否
1表示: 操作成功,响应返回与请求字段一致
2表示: 操作成功,响应返回变更记录的所有字段最新数据
3表示: 操作成功,响应返回变更记录的所有字段旧数据
@retval error 错误码
**/
SetResultFlag(flag int) error
4.2.5 部分字段查询和更新
/**
@brief 设置需要查询或更新的Value字段名称列表,即部分Value字段查询和更新,可用于get、replace、update操作。
@param [IN] valueNameList 需要查询或更新的字段名称列表
@retval error 错误码
@note 在使用该函数设置字段名时,字段名只能包含value字段名,不能包含key字段名;对于数组类型的字段,refer字段和数组字段要同时设置或者同时不设置,否则容易数据错乱
**/
SetFieldNames(valueNameList []string) error
4.2.6 设置用户缓存
/**
@brief 设置用户缓存,响应消息将携带返回
@param [IN] userBuffer 用户缓存
@retval error 错误码
**/
SetUserBuff(userBuffer []byte) error
4.3 Record接口
4.3.1 SetKey/SetValue和GetKey/GetValue接口
通过KV接口,对记录进行赋值(请求消息)和获取(响应消息)
/**
@brief key字段内容设置
@param [in] name 字段名称,最大长度32
@param [in] data 字段内容
@retval error 错误码
*/
func (r *Record) SetKeyInt8(name string, data int8) error
func (r *Record) SetKeyInt16(name string, data int16) error
func (r *Record) SetKeyInt32(name string, data int32) error
func (r *Record) SetKeyInt64(name string, data int64) error
func (r *Record) SetKeyFloat32(name string, data float32) error
func (r *Record) SetKeyFloat64(name string, data float64) error
func (r *Record) SetKeyStr(name string, data string) error
func (r *Record) SetKeyBlob(name string, data []byte) error
/**
@brief value字段内容设置
@param [in] name 字段名称,最大长度32
@param [in] data 字段内容
@retval error 错误码
*/
func (r *Record) SetValueInt8(name string, data int8) error
func (r *Record) SetValueInt16(name string, data int16) error
func (r *Record) SetValueInt32(name string, data int32) error
func (r *Record) SetValueInt64(name string, data int64) error
func (r *Record) SetValueFloat32(name string, data float32) error
func (r *Record) SetValueFloat64(name string, data float64) error
func (r *Record) SetValueStr(name string, data string) error
func (r *Record) SetValueBlob(name string, data []byte) error
/**
@brief key字段内容获取
@param [in] name 字段名称,最大长度32
@retval data 字段内容
@retval error 错误码
*/
func (r *Record) GetKeyInt8(name string) (int8, error)
func (r *Record) GetKeyInt16(name string) (int16, error)
func (r *Record) GetKeyInt32(name string) (int32, error)
func (r *Record) GetKeyInt64(name string) (int64, error)
func (r *Record) GetKeyFloat32(name string) (float32, error)
func (r *Record) GetKeyFloat64(name string) (float64, error)
func (r *Record) GetKeyStr(name string) (string, error)
func (r *Record) GetKeyBlob(name string) ([]byte, error)
/**
@brief value字段内容获取
@param [in] name 字段名称,最大长度32
@retval data 字段内容
@retval error 错误码
*/
func (r *Record) GetValueInt8(name string) (int8, error)
func (r *Record) GetValueInt16(name string) (int16, error)
func (r *Record) GetValueInt32(name string) (int32, error)
func (r *Record) GetValueInt64(name string) (int64, error)
func (r *Record) GetValueFloat32(name string) (float32, error)
func (r *Record) GetValueFloat64(name string) (float64, error)
func (r *Record) GetValueStr(name string) (string, error)
func (r *Record) GetValueBlob(name string) ([]byte, error)
4.3.2 SetData和GetData接口
通过TDR结构体,对记录进行赋值(请求消息)和获取(响应消息)
/**
@brief 基于TDR描述设置record数据
@param [IN] data 基于TDR描述record接口数据,tdr的xml通过工具生成的go结构体,包含的TdrTableSt接口的一系列方法
@retval error 错误码
*/
func (r *Record) SetData(data TdrTableSt) error
/**
@brief 基于TDR描述读取record数据
@param [IN] data 基于TDR描述record接口数据,tdr的xml通过工具生成的go结构体,包含的TdrTableSt接口的一系列方法
@retval error 错误码
**/
func (r *Record) GetData(data TdrTableSt) error
4.3.3 设置记录版本号
/**
@brief 设置记录版本号
@param [IN] v 数据记录的版本号: <=0 表示不关注版本号不关心版本号。具体含义如下。
当CHECKDATAVERSION_AUTOINCREASE时: 表示检测记录版本号。
如果Version的值<=0,则仍然表示不关心版本号不关注版本号;
如果Version的值>0,那么只有当该版本号与服务器端的版本号相同时,
Replace, Update, Increase, ListAddAfter, ListDelete, ListReplace, ListDeleteBatch操作才会成功同时在服务器端该版本号会自增1。
当NOCHECKDATAVERSION_OVERWRITE时: 表示不检测记录版本号。
如果Version的值<=0,则会把版本号1写入服务端的数据记录版本号(服务器端成功写入的数据记录的版本号最少为1);
如果Version的值>0,那么会把该版本号写入服务端的数据记录版本号。
当NOCHECKDATAVERSION_AUTOINCREASE时: 表示不检测记录版本号,将服务器端的数据记录版本号自增1,若服务器端新写入数据记录则新写入的数据记录的版本号为1。
**/
func (r *Record) SetVersion(v int32)
4.3.4 获取记录版本号
/**
@brief 获取记录版本号
@retval 记录版本号
**/
func (r *Record) GetVersion() int32
4.4 TcaplusResponse接口
4.4.1 获取响应结果
/*
@brief 获取响应结果
@retval int tcaplus api自定义错误码。 0,表示请求成功;非0,有错误码,可从terror.GetErrMsg(int)得到错误消息
*/
GetResult() int
4.4.2 获取表名
/*
@brief 获取响应表名
@retval string 响应消息对应的表名称
*/
GetTableName() string
4.4.3 获取appId
/*
@brief 获取响应appId
@retval uint64 响应消息对应的appId
*/
GetAppId() uint64
4.4.4 获取zoneId
/*
@brief 获取响应zoneId
@retval uint32 响应消息对应的zoneId
*/
GetZoneId() uint32
4.4.5 获取响应命令字
/*
@brief 获取响应命令
@retval int 响应消息命令字,cmd包中的响应命令字
*/
GetCmd() int
4.4.6 获取响应异步ID
/*
@brief 获取响应异步id,和请求对应
@retval uint64 响应消息对应的异步id和请求对应
*/
GetAsyncId() uint64
4.4.7 获取响应中记录数
/*
@brief 获取本响应中结果记录条数
@retval int 响应中结果记录条数
*/
GetRecordCount() int
4.4.8 获取响应中一条记录
/*
@brief 从结果中获取一条记录
@retval *record.Record 记录指针
@retval error 错误码
*/
FetchRecord() (*record.Record, error)
4.4.9 获取响应中用户缓存信息
/**
@brief 获取响应消息中的用户缓存信息
@retval []byte 用户缓存二进制,和请求消息中的buffer内容一致
*/
GetUserBuffer() []byte
4.4.10 获取响应中的序列号
/**
@brief 获取响应消息中的序列号
**/
GetSeq() int32
TcaplusDB是腾讯出品的分布式NoSQL数据库,存储和调度的代码完全自研。具备缓存+落地融合架构、PB级存储、毫秒级时延、无损水平扩展和复杂数据结构等特性。同时具备丰富的生态、便捷的迁移、极低的运维成本和五个九高可用等特点。客户覆盖游戏、互联网、政务、金融、制造和物联网等领域。