1. 程式人生 > 其它 >【深入理解TcaplusDB技術】TcaplusDB Go SDK手冊(二)

【深入理解TcaplusDB技術】TcaplusDB 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級儲存、毫秒級時延、無損水平擴充套件和複雜資料結構等特性。同時具備豐富的生態、便捷的遷移、極低的運維成本和五個九高可用等特點。客戶覆蓋遊戲、網際網路、政務、金融、製造和物聯網等領域。