域添加另一台机器_巨杉Tech | SequoiaDB数据域概念解读与实践
1. 相關概念
1.1 多維分區
SequoiaDB支持水平和垂直方式分區。采用散列(hash)或范圍(range)水平分區是將數據分布至多個節點,加大數據吞吐量, 加速數據查詢和寫入;采用范圍(range)垂直分區是在一個節點內將數據邏輯劃分為多個區間,每個區間作為獨立的存儲單元,減少查詢時網絡I/O, 進一步加速查詢。水平分區?
垂直分區
1.2 復制組和域
分區組又被稱為復制組,一個復制組內可以包含一個或多個數據節點(或編目節點),節點之間的數據使用異步日志復制機制,保持最終一致。域(Domain)是由若干個復制組(ReplicaGroup)組成的邏輯單元。每個域都可以根據定義好的策略自動管理所屬數據,如數據切片和數據隔離等。以3臺服務器為例,每臺服務器9塊磁盤。復制組的物理部署和域的邏輯組成如圖所示:采用3副本,按磁盤部署數據節點,每臺機器部署9個數據節點,3臺機器橫向組成數據組,共9個數據組。如圖域1包括數據組1-3,域2包括數據組5-9,域3包括數據組1-6,因此域在邏輯上由數據組組成,并且組成的數據組可以重疊。2. 域的使用場景
隨著用戶的增加、業務的發展,銀行業務系統的數據量越來越大,而且原有系統絕大部分基于關系型數據構建,表結構復雜,每個查詢都需要關聯若干張大數據表,導致關聯查詢的性能非常低。因此可以利用SequoiaDB存儲海量歷史、近線數據并開發數據查詢統一入口,按照數據生命周期管理的規則對歷史、近線數據進行統一在線存儲。另外平臺提供高并發、實時查詢服務,解決了關系型數據庫海量數據關聯查詢性能慢的問題。
根據業務系統歷史、近線數據的需求,建立歷史、近線數據存儲區用于存儲從源系統直接導入的原始數據,包括超出生產系統保存期限的數據以及需要按時點備份的數據。同時為提供在線、中高并發,小結果集的數據處理能力,可根據源系統不同劃分多個存儲區域,集群內部使用劃分數據域的方式進行分類管理。
2.1?水平擴展集群
SequoiaDB 在集群的管理上定義了數據域概念,一個數據域可以將多個數據組包含進來。一個集群可以根據不同的業務系統來劃分不同的數據域,不僅實現將不同業務系統數據在物理層面的隔離存儲,同時也實現了不同業務系統數據的統一調度管理,而且以后的集群擴容也可以根據域的使用需求而只針對此域進行集群擴容。
所以在進行擴容時,我們需要結合 SequoiaDB 數據域和業務系統需求進行擴容規劃及實施。結構化數據在擴容時,可針對結構化數據所在數據域增加數據組再進行數據均衡切分到新擴容的機器上或者使子表所屬數據組在新擴容機器的數據組上;非結構化數據表創建時所屬數據組直接指定到新擴容機器的數據組上。
2.2?隔離業務
根據數據調研信息對業務系統進行分類,以確定業務系統的存儲量、并發大小、數據生命周期等,為結構化數據在巨杉數據庫中的存儲規劃提供信息支撐。業務系統結構化數據存儲到巨杉數據庫可利用數據域技術對業務系統的數據區域進行功能劃分,具體劃分方式如下:
海量數據或者高并發查詢業務系統
這類業務系統的特點是業務查詢并發較大,數據所占存儲空間較大,對cpu、內存、網絡要求較高,利用域對這類系統進行隔離,可以使數據在寫入、讀取時充分利用集群中域所在機器的物理資源以提升性能。
數據量較小或者查詢并發數較小的業務系統
這類業務系統一般對cpu、內存、網絡要求較低,所占存儲空間較小。因此這類系統可以和其他并發、所占存儲較小的業務系統的數據域共享數據組以節省機器資源。
結構化與非結構化數據進行物理隔離
對業務系統的結構化數據和非結構化分開存儲,即結構化數據存儲的數據組與非結構化數據的數據組不相同,防止在同一個數據組中高并發寫入、讀取時產生的IO爭用。
跑批業務系統和數據量較大系統進行物理隔離
銀行部分業務系統存在夜間以跑批的方式將非結構化數據通過接入平臺寫入到巨杉數據庫中,這類系統在跑批會產生大量的網絡請求和IO,對服務器的流量和磁盤IO有較高要求,可以對這些系統進行物理隔離,在規劃時應該利用域進行物理隔離并且域中的數據組不共享,使其獨占集群中部分硬件資源提升跑批性能。
3. 域的使用命令
3.1 創建域
創建一個域,域中可以包含若干個復制組(Replica Group):db.createDomain( <name>, <groups>, [options] )創建一個域,包含兩個復制組:db.createDomain( 'mydomain', [ 'group1', 'group2' ] )創建一個域,包含兩個復制組,并且指定自動切分。
db.createDomain( 'mydomain', [ 'group1', 'group2' ], { AutoSplit: true } )3.2 列出域
枚舉系統中所有由用戶創建的域。db.listDomains()3.3?獲取指定域
db.getDomain( <name> )3.4 刪除域
db.dropDomain( <name> )刪除一個之前創建的域:db.dropDomain( 'mydomain' )刪除一個包含集合空間的域,返回錯誤:> db.dropDomain( 'hello' )(nofile):0 uncaught exception: -256> getLastErrMsg( -256 )Domain is not empty3.5?更改域的屬性
domain.alter( <options> )示例1:1.首先創建一個域,包含兩個復制組,開啟自動切分var domain = db.createDomain( 'mydomain', ['data1', 'data2'], { AutoSplit: true } )v2.從域中刪除一個復制組 data2,添加另一個復制組 data3,最后域中包含 data1 和 data3 兩個復制組domain.alter( { Groups: ['data1', 'data3'] } )示例2:1.首先創建一個域,包含一個復制組,復制組中包含表 foo.bar。 var domain = db.createDomain( 'mydomain', ['group1'] )2.從域中刪除原復制組,添加另一個復制組,將因把擁有數據的 group1 從域中刪除而報錯domain.alter( { Groups: ['group2'] } )(nofile):0 uncaught exception: -256Domain is not empty3.6 查詢表所屬域
var catalog=new Sdbcatalog.SYSCAT.SYSCOLLECTIONSPACES.find({“NAME”:”bs_customer”}4. 操作環境
這一章將通過一個具體的例子來演示如何通過數據域和多維分區存放不同時間周期的數據。4.1?環境說明操作演示環境包含6臺主機,主機名分別為:sdb01, sdb02,sdb03 和?sdb04, sdb05, sdb06。一共有6個數據組,其中:group1,group2,group3這三個數據組在sdb01,sdb02和sdb03這三臺機器上,剩下的group4,group5,group6在sdb04,sdb05和sdb06這三臺機器上,見下圖:4.2 創建數據域
在sdb上創建兩個數據域d2018和d2019。其中,d2018對應group1,group2和group3這三個數據組,d2019對應group4,group5和group6這三個數據組。db.createDomain("d2018",["group1","group2","group3"])db.createDomain("d2019",["group4","group5","group6"])4.3 創建多維分區表
創建一個多維分區表,包含一個用戶余額主表user_amout和兩個用戶余額子表 user_amout2018, user_amout2019。其中,user_amout2018對應數據域d2018,user_amout2019對應數據域d2019。在sdb上創建集合空間和集合
在mysql上創建表
4.4 往多維分區表中導入不同時間周期的記錄
insert into user_amount values(1001,'2018-05-01',1000);insert into user_amount values(2001,'2018-07-01',3000);insert into user_amount values(3001,'2018-09-01',5000);insert into user_amount values(1001,'2019-05-01',2000);insert into user_amount values(2001,'2019-07-01',6000);insert into user_amount values(3001,'2019-09-01',9000);4.5 檢查各個數據節點上的數據
db = new Sdb("sdb01",11830)db.user_2018.user_amount2018.find()db = new Sdb("sdb01",11840)db.user_2018.user_amount2018.find()db = new Sdb("sdb01",11850)db.user_2018.user_amount2018.find()db = new Sdb("sdb04",11860)db.user_2019.user_amount2019.find()db = new Sdb("sdb04",11870)db.user_2019.user_amount2019.find()db = new Sdb("sdb04",11880)db.user_2019.user_amount2019.find()從上述截圖可以看出,user_id為2001和3001的用戶,其2018年的余額數據在11830這個數據節點上,該節點對應數據組group1,部署在sdb01,sdb02和sdb03這三臺主機上。這兩個用戶2019年的余額數據部署在11860這個數據節點上,該節點對應數據組group4,部署在sdb04,sdb05和sdb06這三臺主機上。user_id為1001的用戶情況類似,其2018年的余額數據部署在sdb01,sdb02和sdb03這三臺主機上,其2019年的余額數據部署在sdb04,sdb05和sdb06這三臺主機上。
從上述操作演示可以看出,通過數據域可以很方便的將不同時間周期的數據存放到不同的主機上。當2020的數據即將生成時,只需在新擴的主機上創建相應的子表,然后在掛載到主表user_amount上,即可存放2020年的用戶余額數據。
往期技術干貨巨杉內核筆記 | MVCC多版本控制原理
巨杉內核筆記?|?分布式事務漫談巨杉內核筆記?|?會話(Session)巨杉Tech?|?SequoiaDB高可用原理詳解
巨杉Tech?|?分布式數據庫負載管理WLM實踐
巨杉Tech?|?巨杉數據庫的HTAP場景實踐
巨杉Tech?|?SequoiaDB?SQL實例高可用負載均衡實踐
巨杉Tech?|?并發性與鎖機制解析與實踐
巨杉Tech?|?幾分鐘實現巨杉數據庫容器化部署
巨杉Tech |?“刪庫跑路”又出現,如何防范數據安全風險?
巨杉Tech?|?分布式數據庫千億級超大表優化實踐
社區分享?|?SequoiaDB?+?JanusGraph?實踐
巨杉Tech?|?巨杉數據庫的并發?malloc?實現
巨杉數據庫v5.0?Beta版正式發布巨杉數據庫無人值守智能自動化測試實踐
巨杉Tech?|?讀寫分離機制與實踐巨杉Tech?|?巨杉數據庫數據高性能數據導入遷移實踐點擊,獲取更多精彩內容總結
以上是生活随笔為你收集整理的域添加另一台机器_巨杉Tech | SequoiaDB数据域概念解读与实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何root安卓手机_安卓Root+卡开
- 下一篇: 软件测试工程师简历模板(三年经验)