SQL術語/概念 | MongoDB術語/概念 | TcaplusDB術語/概念 | 解釋/說明 |
---|---|---|---|
database | database | cluster | 數據庫 |
table | collection | tablegroup/table | 數據庫表/集合 |
row | document | record | 數據記錄行/文檔 |
column | field | field | 數據字段/域 |
index | index | index | 索引 |
primary key | primary key | primary key | "主鍵,MongoDB自動將_id字段設置為主鍵" |
TcaplusDB表由主鍵字段和非主鍵字段兩部分組成,主鍵字段最多可以指定8個,普通字段(非普通字段)最多可以指定256個。
按照表定義可分為Protobuf表和TDR表,按照表結構可以分為Generic表和List表。
Protobuf表定義
TDR表定義
Generic表和List表
Tcaplus的表定義要求設置一個分表因子(splittablekey)屬性,分表因子必須是主鍵字段(primarykey)的子集。本質上,splittablekey所包含的字段將參與hash計算,然后根據hash值決定該記錄被存儲至集群中的哪個節點。因此,一個表的多個記錄,它們splittablekey字段的值應該是多樣化的,這樣數據分布才比較均衡。舉例來說,假設一個表的primarykey是"uid,role_id,zone_id",其中uid和role_id的值足夠多樣,而zone_id只有幾個、最多幾百個不同的值,那么使用zone_id作為splittablekey將會有很大的風險,若某個特定zone_id對應的記錄特別多,會導致Tcaplus特定的存儲節點嚴重過載,甚至數據量超過機器存儲容量而無法提供服務。假設一個表的分表因子是性別,這會導致數據最多分布到2個存儲節點, 那么業務的分布式能力就會被限制到最多2個存儲節點的性能上。
分表因子決定了數據的物理分布(系統根據該字段做hash分散到不同節點),建議取離散度高的字段,利于負載均衡。不指定時默認取primarykey的所有字段。
TcaplusDB記錄由一行字符串組成每個字段的數字都支持嵌套類型,嵌套最多32層。單個記錄大小最高10MB,可以將常用的對象文件序列化成二進制文件存儲。
TcaplusDB支持兩種形式的索引:本地索引和全局索引。
本地索引:基于TcaplusDB主鍵字段建立的索引,在建表時隨表一起建立。
全局索引:基于TcaplusDB表一級字段(包括主鍵字段和非主鍵字段)建立的索引。
通過本地索引和全局索引,用戶可方便利用索引進行數據查詢。優勢:
基于本地索引查詢,可以滿足用戶通過部分主鍵字段進行索引查詢
基于全局索引,可以滿足用戶通過任意一級字段進行多種形式查詢,如范圍、模糊、聚合、分頁等。
基于TcaplusDB主鍵字段建立的索引,在建表時隨表一起建立。
本地索引是在建立表的時候,在表定義中申明的,比如proto或者xml文件中。并且一旦表創建后,就不能再增加、修改和刪除本地索引了,刪除表的時候,本地索引會一并刪除。
本地索引只支持等值查詢,也就說,使用本地索引查詢時,需要將本地索引中定義的字段全部都給值,比如定義了本地索引,包含字段為key1, key2,那么使用該索引進行查詢時,就必須把key1和key2的值給出來才可以,并且是key1=XXX and key2=XXX的方式進行查詢;
在tcaplus中,對應的是GetByPartKey請求,只有該請求是利用本地索引進行查詢的;
由于本地索引查詢時,可能會返回非常多的數據,此時,tcaplus會進行分包返回的,如果業務側收包速度低于tcaplus返回響應包的速度,那么就可能導致tcaplus出現因為網絡緩存區滿而丟包的情況,一般建議是使用本地索引查詢時,利用limit和offset的方式來分多次請求數據,特別是當數據量很大時。
本地索引是實時索引,當插入或者刪除數據時,會同時更新索引數據;
本地索引的字段必須包含在主鍵字段中,并且字段中還必須包含分表因子,因此,查詢時最終只會落到一個數據分片上進行查詢;
本地索引只支持等值查詢;
一個表可以建立多個本地索引,查詢時必須包含某一個本地索引的全部字段;
目前只有generic表支持本地索引;
本地索引一旦創建,無法在使用期間修改、刪除、新增,隨表刪除而刪除。
本地索引只支持精確匹配,即在用本地索引字段作為查詢條件時,只能精確匹配到具體值,不支持模糊、范圍匹配。
本地索引必須包含分片因子。
本地索引中的字段都必須屬于主鍵字段。
對其它非主鍵字段建立本地索引也是不允許的。
假設本地索引包含的字段為key1, key2,如果出現key1=XXX and key2=XXX的記錄數非常多時,當進行這個條件的本地索引查詢時,就很容易出現性能問題,需要盡量避免,當然,目前tcaplus是沒有限制記錄數個數的。
全局索引是基于TcaplusDB表一級字段(包括主鍵字段和非主鍵字段)建立的索引,顧名思義,就是tcaplus與索引系統之間是相互獨立的,通過異步同步的方式,將tcaplus中的數據同步到索引系統,因此,全局索引是一個準實時索引系統,即進行索引查詢時,tcaplus表中新更新的數據無法實時查詢出來,正常情況下,新更新的數據到能夠通過索引查詢出來的時延為秒級,大部分情況是1秒之內;
全局索引目前只支持對generic表建立索引,并且只支持表的一級字段(包括key字段和value字段)建立索引;并且也只支持簡單類型建立索引,支持的類型包括:int8, uint8, int16, uint16, int32, uint32, int64, uint64, float, double, string(字符串); 對于pb表的bool和enum類型也支持,當pb表字段定義為string類型,如果該字段存儲的是二進制,那么查詢結果可能會不符合預期;對于uint64類型,如果值大于int64的最大值,查詢結果將不符合預期,因此,如果該字段值會超過int64的最大值,建議不要為該字段建立索引;
tcaplus支持動態創建和修改索引,業務可以隨時增加或刪除或者修改全局索引,修改全局索引時,比如增加了一個索引字段,不會影響業務對修改前的全局索引查詢;
tcaplus與全局索引之間的架構如下圖所示:
創建或者修改全局索引,需要在頁面上進行申請,進入oms頁面,點擊 “業務管理” ---- > "表管理" ---- > 選擇要創建全局索引的表,拉到最右側,如下圖:
點擊 “索引”,進入到索引配置頁面,在該頁面勾上要建立索引的字段,然后點擊“確認創建索引”按鈕,這樣就生成了創建全局索引的申請單,dba審核之后,會生成一個創建全局索引的事務,當事務執行成功后,該索引就可以被訪問了。
數據同步,是指tcaplus數據同步到索引系統,兩者之間的數據是最終一致的,數據同步架構如下圖所示:
tcaplus提供sql查詢語句進行索引查詢,其中,sql查詢條件中的字段必須是建立了全局索引的字段,另外,如果是聚合查詢,那么聚合查詢的字段也必須是建立了全局索引的字段;
一個索引查詢請求,當前限制最多返回3000條記錄;
索引使用方式
tcaplus_client客戶端工具
tcaplus_client工具支持全局索引查詢,查詢命令直接使用sql查詢語句進行查詢即可,使用help select 命令可以獲取相關查詢命令。注意tcaplusdb_client使用版本,目前最新的支持3.46.0。
C++ SDK
C++ SDK 已集成相關全局索引API,在示例代碼中也有相關實現,具體請參考:
C++ TDR SDK 全局二索引示例路徑
TcaplusServiceApiXXX/release/x86_64/examples/tcaplus/C++_tdr1.0_syncmode_generic_simpletable/SingleOperation/globle_index_query
C++ PB SDK全局索引示例路徑
TcaplusPbApiXXX/release/x86_64/examples/tcaplus/C++_pb2_coroutine_simpletable/SingleOperation/global_index_query
條件查詢
支持 =, >, >=, <, <=, !=, between, in, not in, like, not like, and, or , 比如:
select * from table where a > 100 and b < 1000;
select * from table where a between 1 and 100 and b < 1000;
select * from table where str like "test";
select * from table where a > 100 or b < 1000;
注意:between查詢時,between a and b,對應的查詢范圍為[a, b],比如 between 1 and 100, 是會包含1和100這兩個值的,即查詢范圍為[1,100]
注意:like查詢是支持模糊匹配,其中"%"通配符,匹配0個或者多個字符; “_”通配符,匹配1個字符;
分頁查詢
支持limit offset分頁查詢,比如:
select * from table whre a > 100 limit 100 offset 0;
注意:當前limit必須與offset搭配使用,即不支持limit 1 或者 limit 0,1這種;
聚合查詢
當前支持的聚合查詢包括:sum, count, max, min, avg,比如:
select sum(a), count(*), max(a), min(a), avg(a) from table where a > 1000;
注意:聚合查詢不支持limit offset,即limit offset 不生效;
注意:目前只有count支持distinct,即 select count(distinct(a)) from table where a > 1000; 其他情況均不支持distinct
部分字段查詢
支持查詢部分字段的值,比如:
select a, b from table where a > 1000;
對于pb表,還支持查詢嵌套字段的值,類似:
select field1.field2.field3, a, b from table where a > 1000;
不支持聚合查詢與非聚合查詢混用
select *, a, b from table where a > 1000;
select sum(a), a, b from table where a > 1000;
select count(*), * from table where a > 1000;
不支持order by查詢
select * from table where a > 1000 order by a;
不支持group by查詢
select * from table where a > 1000 group by a;
?
不支持having查詢
select sum(a) from table where a > 1000 group by a having sum(a) > 10000;
不支持多表聯合查詢
select * from table1 where table1.a > 1000 and table1.a = table2.b;
不支持嵌套select查詢
select * from table where a > 1000 and b in (select b from table where b < 5000);
不支持別名
select sum(a) as sum_a from table where a > 1000;
不支持的其他查詢
不支持join查詢;
不支持union查詢;
不支持類似 select a+b from table where a > 1000 的查詢;
不支持類似 select * from table where a+b > 1000 的查詢;
不支持類似 select * from table where a >= b 的查詢;
不支持其他未提到的查詢。
?
TcaplusDB是騰訊出品的分布式NoSQL數據庫,存儲和調度的代碼完全自研。具備緩存+落地融合架構、PB級存儲、毫秒級時延、無損水平擴展和復雜數據結構等特性。同時具備豐富的生態、便捷的遷移、極低的運維成本和五個九高可用等特點??蛻舾采w游戲、互聯網、政務、金融、制造和物聯網等領域。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
戴爾筆記本鍵盤燈光怎么循環變色?1.將機械鍵盤插入電腦主機箱或筆記本的USB接口;2.找出機械鍵盤的這兩個鍵。這些是我們機械鍵盤控制燈的按鍵。有些機械鍵盤可能沒有這個花形鍵,所以選擇旁邊的目錄鍵;3.單獨按下這個花形鍵,機械鍵盤就亮了。如果你一直按下去,你會發現鍵盤燈的顏色也在切換。一般按三次燈為一個周期;4.按下的同時打開鍵盤呼吸燈;5.不斷按下它來切換呼吸燈的顏色。dell筆記本鍵盤燈怎么打開...
命運絲線任務哪里接?,這個任務完全發生在奧林匹斯。如果你找到命運作家,你就能得到它。NPC位置的坐標是(20.4,50.2)。魔獸世界命運絲線?wow命運的絲線在哪里...達拉然商業區...達拉然商業區...問NPC要達拉然的布店~ ~ ~如果做劍柄任務,NPC在二樓陽臺。...魔獸世界9.0命運絲線怎么觸發?,首先我們開始游戲。2.然后我們進入登錄界面。3.然后我們 我們會找到塔爾的。4.和他談...
怎么打開vsd格式文件?我們經常在中遇到很多文件。在我們的工作中,vsd格式需要專門的軟件來打開、瀏覽或編輯。下面介紹如何打開vsd文件。如何打開WORD中的VSD文件?1.在Internet上下載visio安裝包。這里以visio2010為例,打開安裝。2.打開后,選擇安裝程序,通常以。exe。雙擊進行安裝。這里已經安裝了,不再贅述。3.安裝完成后,選擇要打開的vsd文件,右鍵單擊“打開方法”,...