什么是分片技術(Sharding)?
Sharding 中文名叫數據分片(是指數據層的水平分區),是對數據進行橫向擴展的一種方式。數據量增加,我可以通過加一臺機器,來擴展其容納能力和處理能力。
Sharding它解決三個關鍵問題:
1.數據的路由
是數據庫告訴應用程序,你讓我查的數據目前在哪個分片上,這條路怎么走過去。
2.數據的分片
是實際數據的存放地點,往往每個分片就是一臺單獨的服務器(含存儲)。
3.分片的元數據信息保存
是被切割放在不同的機器上,那么需要有個集中的地點存放數據分片的信息,即分片元數據的信息。
總結一下就是:應用問路由怎么走,路由去查詢元數據得知需要的數據在哪個分片上,最終應用訪問到該分片上。
Oracle分片- 數據庫架構模式
•Oracle Sharding在提供Sharding的同時,并沒有犧牲掉關系型數據庫所帶來的優秀特性,比如說關系型數據建模,SQL編程接口,豐富的數據類型,在線的表結構變更,充分利用CPU多核的擴展性,高級安全,壓縮,高可用,ACID特征,一致讀,所有的Oracle數據庫的優勢仍然還在那里,但是,額外,提供了Sharding的優勢。
•對于Oracle Sharding的上層來說,使用的是Oracle GDS(Global Data Services)框架來實現自動部署和shading的管理以及拓撲復制。GDS還同時提供了對于整個SDB訪問的負載均衡和基于位置的路由功能。在GDS框架中,global service manager負責將應用過來的請求轉發到合適的shard上,另外還有一個shard catalog數據庫,支持跨shard的查詢功能,同時SDB的配置數據也都存在這個catalog數據庫中。
•對于Oracle Sharding的底層來說,使用的是Oracle長久以來一直存在的分區(partitioning)技術。Oracle Sharding就其本質上來說,實際上就是分布式分區,將以前的分區擴展支持到跨不同的物理數據庫上。

Oracle分片的優點
•數據自動分片到獨立的分片數據庫(分片)中,這些庫組成一個數據庫池。
•這個數據庫池以一個單一的邏輯庫的方式呈現給應用程序
•支持在線添加分片以增加整體吞吐量
•數據量,客戶量和交易量可線性擴展
•一個分片庫的故障或減速不影響其他分片的可用性
•自動部署數據庫復制實現分片級的高可用性(RAC 可選)
•每個分片可獨立補丁和升級,不影響其他分片
•靈活的分片組織- 一致性哈希,區域,列表或復合分片(range-hash, list-hash)
•數據分布可基于可用性,災難恢復,性能,或法規要求決定

Sharding適合所有的數據庫應用嗎?
既然Sharding聽上去很厲害,那么是不是現在只要遇到有性能問題的數據庫,一律都可以使用Sharding技術來解決呢?當然不,Sharding不會也不可能是FAST=TRUE這樣的參數。一個適合Sharding技術的應用,必須有非常好的數據模型,和清晰的數據分布策略(比如是一致性哈希,范圍或者列表分區),并且訪問這些數據也是總要通過shard key來過濾的,只有這樣,才能在整個Sharded數據庫架構中很好地將請求路由到合適的數據庫上。這樣的shard key可能會是客戶編號,國家編號,身份證號碼等。
Sharding適合的業務場景:
專用OLTP應用Custom OLTP Applications,海量擴展和高可用性 MassiveScalability and HA
•大規模計費系統 Large billing systems
•航空票務系統 Airline ticketing systems
•在線金融服務Online financial services
•媒體服務公司Media companies
•在線信息服務Online information services
•社交媒體公司Social media companies
分片數據庫物理架構
Sharding分片數據庫的物理架構如下所示:

分片數據庫組件
•分片目錄庫 Shard Catalog
存儲SDB元數據 metadata
跨片查詢的協調數據庫 coordinator
包含應用的元數據定義和復制表 Contains application gold schema & duplicated tables
•分片導向器 Shard Director(Global Service Manager)
提供從應用層到分片連接請求的路由導向 。
通過ONS FAN發布運行時SDB拓撲圖,均衡負載的建議跨數據庫服務故障切換和管理。
連接時負載均衡 Connect-time loadbalancing。
•全局服務 Global Service
通過服務屬性(service attributes)建立工作負載管理策略 workloadmanagement
本地服務優先 + {本地性, 復制時延, 角色, 數據庫可選擇性, 負載均衡目標}
Local service + {Locality, replication lag, role, database cardinality,load balancing goals}
•GDSCTL
管理SDB及其組件的命令行界面
•GDS區域 GDS Region
網絡上鄰近的一組分片和客戶端
Sharding的部署方式
Sharding的部署方式非常的靈活,不僅可以在不同的主機(不同的操作系統)上部署;也可以部署在不同的地方,同時支持云上的部署。如下圖:

Oracle分片方式
對于Oracle Sharding的底層來說,使用的是Oracle長久以來一直存在的分區(partitioning)技術。Oracle Sharding就其本質上來說,實際上就是分布式分區,將以前的分區擴展支持到跨不同的物理數據庫上。使用的是Oracle GDS(Global Data Services)框架來實現自動部署和shading的管理以及拓撲復制。

總結
OracleSharding是分片數據層架構,數據是橫向分區在獨立的數據庫。每個數據庫的配置被稱為分片單元。所有的分片單元在一起組成一個邏輯數據庫,稱為數據庫分片。
它為企業提供了完整數據平臺,對于業務系統需要分庫分表,要線性水平擴展,沒問題用Sharding最合適,它能做到自動化端到端的生命周期管理,為新一代開發者提供一個企業級的數據庫平臺。
【文章來源:Oracle官網】