欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
循序漸進(jìn):Oracle 12.2的Sharding基礎概念解讀
張大朋(Lunar)Oracle 工程師
Lunar 擁有超過(guò)十年的 ORACLE SUPPORT 從業(yè)經(jīng)驗,曾經(jīng)服務(wù)于ORACLE ACS部門(mén),現就職于 ORACLE Sales Consultant 部門(mén),負責的產(chǎn)品主要是 Exadata,Golden Gate,Database 等。
編輯說(shuō)明:感謝Lunar授權我們轉載其原創(chuàng )文章,文章插入了一些我們以前分享的圖片,作為配合解讀。
2015年8月份內部release了Oracle 12.2 Beta版本(目前內部最新release的版本是2016年2月份發(fā)布的,windows和Linux都有了),目前根據12.2beta文檔的介紹,Oracle推出了sharding的功能,跟其他NOSQL型的sharding結構相比,Oracle Sharding提供的是企業(yè)級的RDBMS的分片技術(shù)。
Oracle Sharding的優(yōu)點(diǎn):
? Relational schemas
? Database partitioning
? ACID properties and read consistency
? SQL and other programmatic interfaces
? Complex data types
? Online schema changes
? Multi-core scalability
? Advanced security
? Compression
? High Availability features
? Enterprise-scale backup and recovery
在Oracle RDBMS 12.2.0.1中最多支持1000個(gè)shards。
Oracle Sharding使用GDS(Global Data Services)架構來(lái)自動(dòng)部署和管理sharding和復制技術(shù)。GDS(GDS是Oracle RDBMS 12.1的新特性)也提供負載均衡和SDB(sharded database)中的基于位置的路由功能。
Shard目錄(Shard directors)使用GDS framework的全局服務(wù)管理組件(global service manager component)來(lái)提供應用層請求到shard的直接路由。shard目錄(Shard directors)是一個(gè)單獨的數據庫,它用來(lái)保存SDB(Sharding database)配置數據和提供其他相關(guān)功能,比如shard的交叉查詢(xún)和集中管理??梢允褂肎DS是GDSCTL工具可以用來(lái)配置SDB。
Oracle Sharding的分區架構(Partitioning Infrastructure)
分區在表空間級別跨Shards分布,每個(gè)表空間關(guān)聯(lián)一個(gè)特定的shard。一個(gè)shard表的每一個(gè)分區放單獨的表空間,并且每個(gè)表空間關(guān)聯(lián)到一個(gè)特定的shard。根據不同的sharding方法,這個(gè)關(guān)聯(lián)可以自動(dòng)建立或者根據定義創(chuàng )建。盡管一個(gè)shard表的多個(gè)分區放在多個(gè)單獨主機的數據庫上(這些數據庫完全獨立,不共享CPU、內存等軟件和硬件),但是應用訪(fǎng)問(wèn)表時(shí)就如同訪(fǎng)問(wèn)一個(gè)單獨數據庫中的分區表一樣。應用發(fā)出的SQL語(yǔ)句不需要依賴(lài)shard號和shard的物理配置。
Oracle Sharding 使用 familiar SQL 語(yǔ)法創(chuàng )建表分區,指定分區表的每行數據如何分片。
一個(gè)shard表的分區鍵叫做sharding key,例如,下面的語(yǔ)法是典型的用來(lái)創(chuàng )建sharding表的:
CREATE SHARDED TABLE customers
( cust_id NUMBER NOT NULL
, name VARCHAR2(50)
, address VARCHAR2(250)
, region VARCHAR2(20)
, class VARCHAR2(3)
, signup DATE
CONSTRAINT cust_pk PRIMARY KEY(cust_id)
)
PARTITION BY CONSISTENT HASH (cust_id)
TABLESPACE SET ts1
PARTITIONS AUTO;
這個(gè)數據分片(shard)就是基于鍵值cust_id,分區采用“CONSISTENT HASH”,這是一個(gè)特定的hash分區類(lèi)型,通常用在分布式系統上。
.
Sharding a Table Family
一個(gè)表家族(Table Family)中沒(méi)有任何父表的表叫做根表(root table),每個(gè)表家族中只能有一個(gè)根表。
表家族中所有的表按照根表的主鍵進(jìn)行sharding,根據各級表的結構,相關(guān)數據可以被存儲在同一個(gè)shard上。
在12.2,在一個(gè)SDB中只支持一個(gè)表家族。
.
以下面的例子說(shuō)明,這里一共3張表組成的表家族(Table Family):客戶(hù)表,訂單表和訂單明細表。
每個(gè)客戶(hù)可以有多個(gè)訂單,每個(gè)訂單中可以有多個(gè)商品,因此訂單明細中就記錄了每個(gè)訂單中的多個(gè)商品,他們的具體數據如下:
在這個(gè)表族中,客戶(hù)編號為123的數據如下:
將一個(gè)表族(Sharded Table Family)分片通常使有下面兩種方法創(chuàng )建:
方法1:不顯示指定父子關(guān)系,而是通過(guò)表之間主外鍵關(guān)系創(chuàng )建表族。
這種方式創(chuàng )建的表族是一個(gè)多級的樹(shù)形結構。
根表(root table)是客戶(hù)表:
–客戶(hù)表的主鍵是CustNo,分區方式是“CONSISTENT HASH (CustNo)”
–保存再表空間集ts1中
CREATE SHARDED TABLE Customers
( CustNo NUMBER NOT NULL
, Name VARCHAR2(50)
, Address VARCHAR2(250)
, CONSTRAINT RootPK PRIMARY KEY(CustNo)
)
PARTITION BY CONSISTENT HASH (CustNo)
PARTITIONS AUTO
TABLESPACE SET ts1
;
–訂單表是客戶(hù)表的字表,子表(訂單表)根據CustNo關(guān)聯(lián)父表(客戶(hù)表):
–訂單表的主鍵是(CustNo, OrderNo),外鍵(CustNo)引用了主表Customers(CustNo)
–分區方式是按照訂單表的外鍵約束(CustFK)
CREATE SHARDED TABLE Orders
( OrderNo NUMBER NOT NULL
, CustNo NUMBER NOT NULL
, OrderDate DATE
, CONSTRAINT OrderPK PRIMARY KEY (CustNo, OrderNo)
, CONSTRAINT CustFK FOREIGN KEY (CustNo) REFERENCES Customers(CustNo)
)
PARTITION BY REFERENCE (CustFK)
;
–訂單明細表是訂單表的字表,子表(訂單明細表)根據CustNo關(guān)聯(lián)父表(訂單表)
–訂單明細表的主鍵是(CustNo, OrderNo, LineNo),外鍵(CustNo, OrderNo)引用了父表Orders(OrderNo)和Orders(CustNo, OrderNo)
–分區方式是按照訂單明細表的外鍵約束(LineFK)
CREATE SHARDED TABLE LineItems
( CustNo NUMBER NOT NULL
, LineNo NUMBER(2) NOT NULL
, OrderNo NUMBER(5) NOT NULL
, StockNo NUMBER(4)
, Quantity NUMBER(2)
, CONSTRAINT LinePK PRIMARY KEY (CustNo, OrderNo, LineNo)
, CONSTRAINT LineFK FOREIGN KEY (CustNo, OrderNo) REFERENCES Orders(OrderNo)
REFERENCES Orders(CustNo, OrderNo)
)
PARTITION BY REFERENCE (LineFK)
;
因此,上面的例子中,這個(gè)表家族的所有數據都保存在同一個(gè)表空間集ts1中。
當根表中增加一個(gè)分區的時(shí)候,那么相關(guān)聯(lián)的表中都會(huì )自動(dòng)增加相應的分區。
.
方法2:在分區表中顯示指定父子關(guān)系的方法創(chuàng )建表家族
這種分區方法只支持兩級的表家族(two-level table families),所有的子表必須有相同的父表,父表的分區列在每個(gè)子表中都存在,例如下面的CustNo.
.
–沒(méi)有關(guān)鍵字“PARENT”(也沒(méi)有上面引用約束關(guān)鍵字)的是根表,即客戶(hù)表(Customers)
CREATE SHARDED TABLE Customers
( CustNo NUMBER NOT NULL
, Name VARCHAR2(50)
, Address VARCHAR2(250)
, region VARCHAR2(20)
, class VARCHAR2(3)
, signup DATE
)
PARTITION BY CONSISTENT HASH (CustNo)
TABLESPACE SET ts1
PARTITIONS AUTO
;
–根據關(guān)鍵字“PARENT Customers”指定了訂單表(Orders)的父表是客戶(hù)表(Customers)
CREATE SHARDED TABLE Orders
( OrderNo NUMBER
, CustNo NUMBER
, OrderDate DATE
)
PARENT Customers
PARTITION BY CONSISTENT HASH (CustNo)
TABLESPACE SET ts1
PARTITIONS AUTO
;
–根據關(guān)鍵字“PARENT Customers”指定了訂單明細表(LineItems)的父表是客戶(hù)表(Customers)
CREATE SHARDED TABLE LineItems
( LineNo NUMBER
, OrderNo NUMBER
, CustNo NUMBER
, StockNo NUMBER
, Quantity NUMBER
)
)
PARENT Customers
PARTITION BY CONSISTENT HASH (CustNo)
TABLESPACE SET ts1
PARTITIONS AUTO
;
Creating a Duplicated Table Using CREATE TABLE
復制表可以被復制到所有的shard上,這種在每個(gè)shard上有相同內容的表叫做復制表(Duplicated Table),需要經(jīng)常跟shard表關(guān)聯(lián)的小表適合于作為復制表(Duplicated Table),適用于:
(1)只讀表
(2)大量跨shard的讀操作
Oracle Sharding使用Materialized View Replication來(lái)同步復制表(duplicated tables)的內容,每個(gè)shard上的duplicated tables的內容是一個(gè)只讀物化視圖(read-only materialized view)。
物化視圖(materialized views)的主表保存在一個(gè)專(zhuān)門(mén)的數據庫中,叫做Shard Catalog。
所有shard上的物化視圖(materialized views)會(huì )根據配置的頻率自動(dòng)刷新。
創(chuàng )建復制表的語(yǔ)句“CREATE DUPLICATED TABLE”會(huì )自動(dòng)創(chuàng )建master表,物化視圖和其他物化視圖復制所需要的對象。
還是以上面的客戶(hù)訂單關(guān)系為例,這里定義產(chǎn)品表(Products)為復制表:
CREATE DUPLICATED TABLE Products
( StockNo NUMBER PRIMARY KEY
, Description VARCHAR2(20)
, Price NUMBER(6,2))
)
;
根據sharding的機制,sharding的設計對后續系統性能影響是非常大的。一旦sharding創(chuàng )建完成,并已經(jīng)有很多數據,相關(guān)的屬性就不能再修改了,比如某個(gè)表是復制表,還是sharding表,sharding key等等,因此,SDB的設計是至關(guān)重要的,在設計sharding時(shí)需要考慮的有:
哪些表需要被設計為sharding表;
哪些表需要做復制表;
哪些shard表是根表;
使用什么方法來(lái)關(guān)聯(lián)一個(gè)表到其他表或者根表;
應該使用哪種sharding方法;
使用哪個(gè)作為sharding key;
如何加入"云和恩墨大講堂"微信群
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
循序漸進(jìn):Oracle 12c新特性Sharding技術(shù)解讀
ORALCE常識及SQL基本語(yǔ)法
淺談Oracle中大數據量表的管理
Oracle的表壓縮
oracle move 表
Oracle分區表(Partition Table)的數量限制
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久