編輯手記:sharding技術我們談了好久,想必大家并不陌生,該功能12.2最新版本中,也将變得越來越完善,今天我們一起來學習。
注:文章内容來自官方文檔翻譯。若需要了解更多,請查閱官方文檔。
1、about sharding
簡單來說,oracle的sharding技術就是通過分區(partioning)技術的擴充來實作的。以前一個表的分區可以存在于不同的表空間,現在可以存在于不同的資料庫。不同分區存在于不同資料庫,這就将資料隔離了開來,sharding就此實作。
sharding是一種資料層架構,其中資料在獨立資料庫之間進行水準分區。每個資料庫托管在專用伺服器上,具有自己的本地資源 - cpu,記憶體,閃存或磁盤。 這種配置中的每個資料庫稱為分片。 所有的分片一起組成一個邏輯資料庫,稱為分片資料庫(sdb)。水準分區涉及跨分片分割資料庫表,以便每個分片包含具有相同列但行的不同子集的表。以這種方式分割的表也稱為分片表。
2、benefits of sharding
sharding為最高要求的oltp應用提供線性可擴充性和完整的故障隔離。其主要優點包括:
線性可擴充性。 sharding消除了性能瓶頸,并且可以通過添加分片來線性擴充性能和容量。 故障遏制。分片是一種無共享硬體基礎架構,可消除單點故障,例如共享磁盤,san和群集,并提供強大的故障隔離 - 一個分片的故障或減慢不會影響其他分片的性能和可用性。 資料的地理分布。分片使得可以盡量接近消費者進行存儲特定資料,并且當資料必須位于特定管轄區時滿足監管要求。 滾動更新。一次在一個分片上應用配置更改不會影響其他分片,并允許管理者首先測試對小資料子集的更改。 雲部署的簡單性。分片非常适合在雲中部署,可以根據需要調整大小以适應任何可用的雲基礎設施,并且仍然實作所需的服務水準。 oracle sharding支援内部部署,雲和混合部署模型。
與實作分片的nosql資料存儲不同,oracle sharding提供了分片的優點,而不會犧牲企業rdbms的功能。例如,oracle sharding支援:
關系模式 資料庫分區 acid屬性和讀取一緻性 sql和其他程式設計接口 複雜資料類型 線上模式更改 多核可擴充性 進階安全 壓縮 高可用性功能 企業級備份和恢複
3、oracle sharding體系結構的元件
oracle sharding是适用于oltp應用程式的可擴充性和可用性功能。它可以在不共享硬體或軟體的oracle資料庫池中分發和複制資料。應用程式将資料庫池視為單個邏輯資料庫。應用程式可以通過向池中添加資料庫(分片),在任何平台上将資料、事務和使用者彈性擴充到任何級别。 oracle 12.2支援擴充到1000個分片。
下圖說明了oracle sharding的主要架構元件:
分段資料庫(sdb) - 單個邏輯oracle資料庫,橫跨在沒有共享硬體或軟體的實體oracle資料庫(分片)池中進行水準分區 分片 - 承載分片資料庫子集的獨立實體oracle資料庫 全局服務 - 提供對sdb中資料的通路的資料庫服務 shard目錄 - 支援自動分片部署,集中管理分片資料庫和多分片查詢的oracle資料庫 分片導向 - 網絡偵聽器,可根據分片鍵實作高性能連接配接路由 連接配接池 - 在運作時,通過跨池連接配接路由資料庫請求,充當分片導向 管理接口 - gdsctl(指令行實用程式)和oracle企業管理器(gui)
4、關于分片
shards是托管在具有自己的本地資源(cpu,記憶體和磁盤)的資料庫伺服器上的獨立oracle資料庫。在分片之間不需要共享存儲。分片資料庫是分片的集合。 分片可以放置在一個區域或不同的區域中。 在oracle sharding的環境中,一個區域代表一個資料中心或處于緊密網絡鄰近的多個資料中心。
可以使用oracle複制技術(如data guard)為ha和dr複制碎片。 對于ha,備用分片可以放置在放置主分片的相同區域。 對于dr,備用分片位于另一個區域。
5、global service(全球服務)
全局服務是對傳統資料庫服務概念的擴充。傳統資料庫服務的所有屬性都支援全局服務。 對于分片資料庫,為全局服務設定了其他屬性( 例如資料庫角色、複制滞後限制、用戶端和分片之間的區域關聯性等), 對于讀寫事務工作負載,建立單個全局服務以從sdb中的任何主分片通路資料。 對于使用adg的高可用性分片,可以建立單獨的隻讀全局服務。
6、shard catalog
shard catalog是一個專用的oracle資料庫,它是sdb配置資料的持久存儲,并在分片資料庫的集中管理中發揮關鍵作用。所有配置更改(例如添加和删除碎片和全局服務)都在shard catalog上啟動。 sdb中的所有ddl都通過連接配接到shard catalog來執行。
shard catalog還包含sdb中所有重複表的副本,使用執行個體化視圖可以自動将的表更改複制到所有分片中。shard catalog資料庫還用于處理不指定分片關鍵字的分片查詢,充當查詢協調器。
使用oracle dg實作shard catalog高可用性是建議的最佳做法。shard catalog對sdb的可用性沒有影響。shard catalog的中斷僅影響在完成自動故障轉移到備用 shard catalog所需的短暫時間内,執行維護操作或多分片查詢的功能。 oltp事務繼續由sdb路由和執行,并且不受catalog中斷的影響。
7、shard director(分片導向)
oracle database 12c引入了全局服務管理器,以根據資料庫角色、負載、複制滞後和位置進行路由連接配接。為了支援oracle sharding,全球服務管理器支援基于資料位置的連接配接路由。在oracle sharding的環境中,全局服務管理器被稱為分片導向。
分片導向是全局服務管理器的特定實作,它充當連接配接到sdb的用戶端的區域偵聽器,維護sdb的目前拓撲圖,基于在連接配接請求期間傳遞的分片鍵,将連接配接請求路由到适當的分片。
對于典型的sdb,每個區域的專用低端商用伺服器上安裝一組碎片導向,若要實作高可用性,可以部署多個分片導向。在oracle 12.2中,可以在給定區域中部署最多5個分片導向.
以下是分片導向的主要功能:
維護有關sdb配置和分片可用性的運作時資料 測量其自身和其他區域之間的網絡延遲 作為用戶端連接配接到sdb的區域偵聽器 管理全球服務 執行連接配接負載平衡
今天我們一起來看sharding技術在oracle 12.2最新版本有什麼變化?
oracle database 12c版本2(12.2)的分片是一種适用的線上事務處理(oltp)應用程式的架構,其中資料被水準分區到多個分立的oracle資料庫(稱為分片),這些資料庫不共享硬體或軟體。分片集合作為單個邏輯資料庫呈現給應用程式。
oracle分片支援自動部署,高性能路由和完整的生命周期管理.
通過oracle data guard或oracle goldengate replication進行自動部署,可實作單個分片的高可用性。每個分片是一個oracle資料庫,它們具有相同的功能,隻有極少數的情況下會作為非分片部署中的oracle資料庫。
oracle分片用于為分片式資料庫架構顯式設計的自定義oltp應用程式。
與基于oracle real application clusters(oracle rac)的架構不同,使用分片的應用程式必須具有明确定義的資料模型和資料分布政策(一緻的哈希,範圍,清單或組合),主要使用分片鍵通路資料。密鑰的示例包括customer_id,account_no,country_id等。 oracle分片還支援資料放置政策和所有部署模型(例如,本地和公共或混合雲)。
oracle 12.2對資料庫分片做了許多增強:
1、具有完全故障隔離的線性可擴充性。專為oracle分片而設計的oltp應用程式可以在任何平台上彈性擴充(資料、事務和使用者)到任何級别,隻需在其他獨立伺服器上部署新的分片即可。由于計劃外中斷或計劃維護而導緻的碎片的不可用性僅影響該碎片的使用者;它不會影響其他分片使用者的應用程式的可用性或性能。每個分片都可以運作不同版本的oracle資料庫,隻要應用程式與最早運作的版本向後相容,即可在執行資料庫維護時輕松維護應用程式的可用性。 2、使用許多生命周期管理任務的自動化簡單化,包括系統管理分區,單指令部署和細粒度再平衡。 3、使用智能、資料相關的路由提供卓越的運作性能。 4、企業品質(enterprise quality)良好。每個分片是一個oracle資料庫,呈現出嚴格的一緻性、sql的全部功能、開發人員與json的靈活性、以及用于安全性、可用性、備份和恢複以及生命周期管理的久經驗證的企業品質(enterprise quality)。
oracle sharding的使用場景
extreme scaling of web-scale oltp databases 規模較大的web-scale 聯機事務處理資料庫 主要執行單片操作 fault isolation 故障隔離 單個分片出現故障不會導緻真個伺服器挂掉 geo-data distribution 地理資料分布 使資料更接近消費者以減少延遲 需要滿足在公民國家存儲使用者資料的監管要求
oracle sharded 資料庫的完整平台包括:
1、水準分割10,100或1000個不共享硬體或sorware的離散oracle資料庫的資料和工作負載
2、自動端到端生命周期管理
對于單片查詢和分片間查詢,允許自動分區/複制、彈性擴充、自動平衡、資料相關路由
3、對以下開發商提供企業級資料庫平台
明确地設計app與容錯線性縮放; 假定使用json的模式靈活性; 從關系型sql和acid的強大力量中産生效益。