ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【深入理解TcaplusDB技术】TcaplusDB Go SDK手册(二)

2022-04-18 17:33:12  阅读:177  来源: 互联网

标签:string TcaplusDB name Record func error Go retval 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

 


 

img

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

标签:string,TcaplusDB,name,Record,func,error,Go,retval,SDK
来源: https://www.cnblogs.com/tcaplusdb/p/16160750.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有