日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

域添加另一台机器_巨杉Tech | SequoiaDB数据域概念解读与实践

發布時間:2023/12/20 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 域添加另一台机器_巨杉Tech | SequoiaDB数据域概念解读与实践 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
近年來,銀行各項業務發展迅猛,客戶數目不斷增加,后臺服務系統壓力也越來越大,系統的各項硬件資源也變得非常緊張。因此,在技術風險可控的基礎上,希望引入大數據技術,利用大數據技術優化現有IT系統實現升級改造,搭建一個統一存儲和管理歷史、近線數據的服務平臺,同時能夠對外支持高并發、低延時的數據查詢服務,以提高IT系統的計算能力,降低IT系統的建設成本,優化IT系統的服務體系,為各個業務部門提供更加優質的IT服務。這類服務平臺在整個IT系統架構中實質上是一個為核心業務系統減負的系統。SequoiaDB 巨杉數據庫是一款開源的金融級分布式關系型數據庫,主要對高并發聯機交易型場景提供高性能、可靠穩定以及無限水平擴展的數據庫服務。用戶可以在 SequoiaDB 巨杉數據庫中創建多種類型的數據庫實例,如MySQL、PostgreSQL 與 SparkSQL,以滿足上層不同應用程序各自的需求。SequoiaDB巨杉數據庫支持海量分布式數據存儲,并且支持垂直分區和水平分區,利用這些特性可以將歷史、近線數據存儲到SequoiaDB中,并能夠對外支持高并發、低延時的數據查詢服務。目前,巨杉數據庫已經成為許多銀行大數據平臺的一個重要組成部分,承擔著歷史數據平臺、影像平臺等多個重要業務的支撐工作。

1. 相關概念

1.1 多維分區

SequoiaDB支持水平和垂直方式分區。采用散列(hash)或范圍(range)水平分區是將數據分布至多個節點,加大數據吞吐量, 加速數據查詢和寫入;采用范圍(range)垂直分區是在一個節點內將數據邏輯劃分為多個區間,每個區間作為獨立的存儲單元,減少查詢時網絡I/O, 進一步加速查詢。
  • 水平分區?

散列水平分區,原理是將選擇的分區鍵進行hash運算,根據hash值將數據分發至相應分區。范圍水平分區則是直接匹配分區鍵和所對應的范圍,存放到相應的分區。兩種分區方式各有適用的場景,和運行的業務息息相關。一般不建議采用范圍水平分區,除范圍分區鍵(如月)能保證數據均衡(如每月的數據量級一致)。如圖所示:
  • 垂直分區

垂直分區是指在一個節點內集合數據按某字段,分成成多個數據段。每個范圍代表一個垂直分區。數據查詢、寫入時自動分發至相應分區中。垂直分區極大減少硬盤數據訪問,降低網絡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 empty

3.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 empty

3.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上創建集合空間和集合

db.createCS("user_all")db.createCS("user_2018",{Domain:"d2018"})db.createCS("user_2019",{Domain:"d2019"})db.user_all.createCL("user_amount",{ShardingKey:{acct_mon:1},ShardingType:'range',IsMainCL: true,EnsureShardingIndex:false})db.user_2018.createCL("user_amount2018",{ShardingKey:{user_id:1},ShardingType:'hash',EnsureShardingIndex:false,AutoSplit:true});db.user_2019.createCL("user_amount2019",{ShardingKey:{user_id:1},ShardingType:'hash',EnsureShardingIndex:false,AutoSplit:true});db.user_all.user_amount.attachCL("user_2018.user_amount2018",{LowBound:{acct_mon:{$date:"2018-01-01"}},UpBound:{acct_mon:{$date:"2019-01-01"}}});db.user_all.user_amount.attachCL("user_2019.user_amount2019",{LowBound:{acct_mon:{$date:"2019-01-01"}},UpBound:{acct_mon:{$date:"2020-01-01"}}});

  • 在mysql上創建表

create database user_all;use user_all;create table user_amount ( user_id int not null , acct_mon date not null , amount int not null )COMMENT="sequoiadb:{table_options:{ShardingKey:{acct_mon:1},ShardingType:'range',IsMainCL: true,EnsureShardingIndex:false}}" ;

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数据域概念解读与实践的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。