【TcaplusDB知識庫】預設Schema表型別介紹
1. 資料表及相關規則
1.1. 資料表規則
-
資料表名稱不超過32位元組(包含'\0'結尾)
-
欄位名不超過32位元組(包含'\0'結尾)
-
每個Key欄位不超過1024位元組
-
每個Value欄位不超過10MB
-
單條記錄Pack後長度不超過10MB
1.2. 變更規則
-
不允許對primarykey、splitkey、index做任何變更;
-
Value欄位可以增加欄位但不能減少欄位,並且增加欄位時要注意版本號的變更;
-
Value欄位預設值可更改,Value欄位最大長度只能改大不能改小;
-
不允許刪除Value欄位,不允許更改Value欄位名稱和型別;
-
List型別表的最大元素個數只允許改大不允許改小,且最大元素個數不能超過10000;
1.3. Generic表
-
可以建索引(見本地索引和全域性索引)
-
最多支援8個Key欄位,256個Value欄位
1.4. List表
-
不能建索引
-
Key欄位最多隻能有7個,Value欄位最多255個, 各有一個要預留給系統使用。
-
List支援方便的頭尾操作, 適合郵件,留言板,戰鬥記錄等場景
-
List表需要指定單個Key記錄下的最大元素個數(目前最大10000),超過最大元素個數時,可指定從頭部或尾部刪除老元素。預設採用FIFO方式淘汰。SortList表和普通List表一樣有最大元素個數,插入超過最大元素個數N時,對於正序(從小排到大)總是保留最小的N個元素,倒序則反之,總是保留最大的N個元素。
-
可以一次取出單個Key下的所有Value,Value內部的排列無序。
2. Generic表
2.1. TDR-Generic表示例
< struct name= "PLAYERONLINECNT" version= "1" primarykey= "TimeStamp,GameSvrID" splittablekey= "TimeStamp" >
< entry name= "TimeStamp" type= "uint32" desc= "單位為分鐘" />
< entry name= "GameSvrID" type= "string" size= "64" />
< entry name= "GameAppID" type= "string" size= "64" desc= "gameapp id" />
< entry name= "OnlineCntIOS" type= "uint32" defaultvalue= "0" desc= "ios線上人數" />
< entry name= "OnlineCntAndroid" type= "uint32" defaultvalue= "0" desc= "android線上人數" />
< entry name= "BinaryLen" type= "smalluint" defaultvalue= "1" desc= "資料來源資料長度;長度為0時,忽略來源檢查" />
< entry name= "binary" type= "tinyint" desc= "二進位制" count= "1000" refer= "BinaryLen" />
< entry name= "binary2" type= "tinyint" desc= "二進位制2" count= "1000" refer= "BinaryLen" />
< entry name= "strstr" type= "string" size= "64" desc= "字串" />
< index name= "index_id" column= "TimeStamp" />
</ struct >
2.2. PB-Gneric表示例
message pb_generic_index_shardingkey {
option( tcaplusservice. tcaplus_primary_key) = "openid,tconndid,timekey,svrid";
option( tcaplusservice. tcaplus_index) = "index_openid(openid)";
option( tcaplusservice. tcaplus_index) = "index_openid_tconndid(openid,tconndid)";
option( tcaplusservice. tcaplus_index) = "index_full_key(openid,tconndid,timekey,svrid)";
option( tcaplusservice. tcaplus_sharding_key) = "openid";
//4個key
required uint32 openid = 1; //QQ Uin
required string timekey = 2[( tcaplusservice. tcaplus_size) = 20, ( tcaplusservice. tcaplus_desc) = "bingo"];
required int32 tconndid = 3;
required string svrid = 4;
//value
required string gamesvrid = 5[( tcaplusservice. tcaplus_size) = 11];
repeated property other_property= 6 ; //其他擴充套件屬性
optional item_bag items = 7;
repeated int64 lockid = 8 [ packed = true];
optional bytes val = 9;
optional pay_info pay = 10;
optional uint32 id_uint32 = 11;
optional int32 id_int32 = 12;
}
3. List表
Tcaplus對List表的儲存採用分級機制,包括:
-
索引記錄,Fullkey + (idx1,idx2,idx3,……,idxn)
-
資料記錄,[FullKey+idx1,value1] [ FullKey+idx2,value2] [ ……][FullKey+idxn,valuen]
3.1. TDR-List表示例
< struct name= "following_action_list" version= "1" primarykey= "game,myuin" >
< entry name= "game" type= "uint64" defaultvalue= "0" desc= "遊戲ID" />
< entry name= "myuin" type= "uint32" desc= "QQ號" />
< entry name= "actiontype" type= "uint8" defaultvalue= "0" desc= "1-分享圖片,2-贊圖片,3-評論圖片" />
< entry name= "uin2" type= "uint32" desc= "關注人QQ號" />
< entry name= "nick2" type= "string" size= "128" desc= "關注人暱稱" />
< entry name= "sex" type= "uint8" defaultvalue= "0" desc= "關注人性別男0女1" />
< entry name= "pid" type= "string" size= "33" desc= "關注人操作圖片ID" />
< entry name= "time" type= "uint32" desc= "時間" />
< entry name= "content" type= "string" size= "1024" desc= "動態詳細內容" />
</ struct >
3.2. PB-List表示例
syntax = "proto3";
package myTcaplusTable;
import "tcaplusservice.optionv1.proto";
message tb_online_list {
option( tcaplusservice. tcaplus_primary_key) = "openid,tconndid,timekey";
option( tcaplusservice. tcaplus_customattr) = "TableType=LIST;ListNum=1900";
int32 openid = 1; //QQ Uin
int32 tconndid = 2;
string timekey = 3;
string gamesvrid = 4;
int32 logintime = 5 ;
repeated int64 lockid = 6;
pay_info pay = 7;
message pay_info {
uint64 total_money = 1;
uint64 pay_times = 2;
}
map< string, pay_info> projects = 8;
}
4. SortList表
最多允許4個排序欄位,且在建表的xml(tdr)中指定,具體格式如下:
< struct name= "following_action_list" version= "1" primarykey= "game,myuin" customattr= "TableType=SORTLIST;SortRule=INSC;SortFieldNum=1" >
< entry name= "game" type= "uint64" defaultvalue= "0" desc= "遊戲ID" />
< entry name= "myuin" type= "uint32" desc= "QQ號" />
< entry name= "actiontype" type= "uint8" defaultvalue= "0" desc= "1-分享圖片,2-贊圖片,3-評論圖片" />
< entry name= "uin2" type= "uint32" desc= "關注人QQ號" />
< entry name= "nick2" type= "string" size= "128" desc= "關注人暱稱" />
< entry name= "sex" type= "uint8" defaultvalue= "0" desc= "關注人性別男0女1" />
< entry name= "pid" type= "string" size= "33" desc= "關注人操作圖片ID" />
< entry name= "time" type= "uint32" customattr= "sort1" desc= "時間" />
< entry name= "content" type= "string" size= "1024" desc= "動態詳細內容" />
</ struct >
如上customattr="TableType=SORTLIST;ListNum=1023;SortFieldNum=1"表示該表格型別為SORTLIST,SortRule=INSC表示升序排列,SortFieldNum=1表示排序欄位有1個,customattr="sort1"表示第一個排序欄位。
-
排序預設按照從小到大進行排序,在ServiceApi中可以指定是從小到大取還是從大到小取。
-
暫時不允許在表變更時從無序List變為SortList,也不允許從SortList變更為無序List,不允許表變更變換排序欄位的順序以及增減排序欄位(這個均採用自己寫so走表變更Key-Value方式實現)。
-
排序欄位最大位元組數8B,排序欄位的型別:byte, uint16,uint32,uint64,int16,int32,int64,float,double【string(包含\0最多8B,暫時不支援)】。
-
排序是指Value欄位參與排序,而不是Key。
使用說明:
排序
當已有資料結構排好序後,再採用ListAddAfter進行資料插入時,採用插入排序效果最佳。
插入
對於ListAddAfter,流程是:先看是否已經滿了,如果滿了且不允許淘汰元素,則插入失敗,如果滿了,允許淘汰,則刪掉那個元素,並且獲取一個BiggestIndex,將新元素插在對應位置,並挪動其他元素。
而對於SortList,當使用者進行ListAddAfter時,List數目超過最大元素個數N時,對於正序(從小排到大)總是保留最小的N個元素,也就是說插入的元素比當前最大值還大時,會插入失敗(因為立即被淘汰),而倒序則反之,總是保留最大的N個元素。
4.1. TDR-Sortlist表示例
< struct name= "table_Sortlist_single" primarykey= "key, name" customattr2= "TableType=SORTLIST;ListNum=1023;SortFieldNum=1;SortRule=DESC" version= "5" desc= "用於list表遍歷測試, 需要4個shard, 建表list最大1023個元素" >
< entry name= "key" type= "uint32" desc= "單個uint32作為KEY的時候, hashcode = key % 10000" />
< entry name= "name" type= "int16" />
< entry name= "level" type= "uint32" />
< entry name= "value1" type= "string" size= "102400" defaultvalue= "" desc= "最大長度:100KB" />
< entry name= "value2" type= "string" size= "102400" defaultvalue= "" desc= "最大長度:100KB" />
< entry name= "type_int8" type= "int8" desc= "type_int8" />
< entry name= "type_uint8" type= "uint8" desc= "type_uint8" />
< entry name= "type_int16" type= "int16" desc= "type_int16" customattr2= "sort1" />
< entry name= "type_uint16" type= "uint16" desc= "type_uint16" />
< entry name= "type_int32" type= "int32" desc= "type_int32" />
< entry name= "type_uint32" type= "uint32" desc= "type_uint32" />
< entry name= "type_int64" type= "int64" desc= "type_int64" />
< entry name= "type_uint64" type= "uint64" desc= "type_uint64" />
< entry name= "type_float" type= "float" desc= "type_float" />
< entry name= "type_double" type= "double" desc= "type_double" />
< entry name= "type_short" type= "short" desc= "type_short" />
< entry name= "type_string" type= "string" desc= "type_string" size= "20" />
< entry name= "type_tinyint" type= "tinyint" desc= "type_tinyint" />
< entry name= "type_datetime" type= "datetime" desc= "type_datetime" />
</ struct >
4.2. PB-SortList表示例
message pb_sortedlist {
option( tcaplusservice. tcaplus_primary_key) = "openid,tconndid,timekey,svrid";
option( tcaplusservice. tcaplus_customattr) = "TableType=SORTLIST;ListNum=1900;SortField=id_int32";
//4個key
required uint32 openid = 1; //QQ Uin
required string timekey = 2[( tcaplusservice. tcaplus_size) = 20, ( tcaplusservice. tcaplus_desc) = "bingo"];
required int32 tconndid = 3;
required string svrid = 4;
//value
required string gamesvrid = 5[( tcaplusservice. tcaplus_size) = 11];
repeated property other_property= 6 ; //其他擴充套件屬性
optional item_bag items = 7;
repeated int64 lockid = 8 [ packed = true];
optional bytes val = 9;
optional pay_info pay = 10;
optional uint32 id_uint32 = 11;
optional int32 id_int32 = 12;
}
TcaplusDB是騰訊出品的分散式NoSQL資料庫,儲存和排程的程式碼完全自研。具備快取+落地融合架構、PB級儲存、毫秒級時延、無損水平擴充套件和複雜資料結構等特性。同時具備豐富的生態、便捷的遷移、極低的運維成本和五個九高可用等特點。客戶覆蓋遊戲、網際網路、政務、金融、製造和物聯網等領域。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69982264/viewspace-2843732/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【TcaplusDB知識庫】TcaplusDB本地索引介紹索引
- 【TcaplusDB知識庫】TcaplusDB全域性索引介紹索引
- [TcaplusDB知識庫]資料庫支撐底盤引擎計算層介紹資料庫
- 【TcaplusDB知識庫】什麼是TcaplusDB資料庫?資料庫
- MySQL information_schema庫下的表型別資訊彙總MySqlORM型別
- 資料庫安全知識介紹資料庫
- [TcaplusDB知識庫]TcaplusDB客戶端及常用命令客戶端
- 資料庫基礎知識介紹!資料庫
- MySQL information_schema 系統庫介紹MySqlORM
- 【TcaplusDB知識庫】如何對陣列進行操作陣列
- 資料庫開發必備知識介紹資料庫
- mysql的 information_schema 資料庫介紹MySqlORM資料庫
- 【TcaplusDB知識庫】條件過濾說明與更新
- Epub基礎知識介紹
- MySQL 5.7 Performance Schema 介紹MySqlORM
- MYSQL SET型別欄位的SQL操作知識介紹MySql型別
- MySQL預設資料庫之 information_schema庫MySql資料庫ORM
- MySQL預設資料庫之performance_schema庫MySql資料庫ORM
- Oracle database 補丁知識介紹OracleDatabase
- shiro入門知識介紹
- JDE 的掃盲知識介紹。。。
- 工控組態程式設計相關知識點介紹程式設計
- 【TcaplusDB知識庫】PB表 C++ 示例程式碼-更新資料C++
- 2 Day DBA-介紹-資料庫識別符號資料庫符號
- 區塊鏈入門知識介紹!區塊鏈
- [推薦]WebService開發知識介紹Web
- t-io網路程式設計基礎知識介紹程式設計
- C# 基礎知識系列- 13 常見類庫介紹(一)C#
- 【TcaplusDB知識庫】PB表 C++ 示例程式碼-讀取資料C++
- 【TcaplusDB知識庫】PB表C++示例程式碼-刪除資料C++
- 資料庫介紹--初識資料庫資料庫
- 關於mysql基礎知識的介紹MySql
- Java知識點總結(註解-介紹)Java
- jar包涉及到的知識介紹JAR
- Java基礎知識篇——Java基本介紹Java
- Oracle預設使用者介紹Oracle
- 圖文識別解決方案介紹
- 反光衣穿戴識別系統介紹