Oracle Sharding的优点:
? 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个shards。
Oracle Sharding使用GDS(Global Data Services)架构来自动部署和管理sharding和复制技术。GDS(GDS是Oracle RDBMS 12.1的新特性)也提供负载均衡和SDB(sharded database)中的基于位置的路由功能。
Shard目录(Shard directors)使用GDS framework的全局服务管理组件(global service manager component)来提供应用层请求到shard的直接路由。shard目录(Shard directors)是一个单独的数据库,它用来保存SDB(Sharding database)配置数据和提供其他相关功能,比如shard的交叉查询和集中管理。可以使用GDS是GDSCTL工具可以用来配置SDB。
Oracle Sharding的分区架构(Partitioning Infrastructure)分区在表空间级别跨Shards分布,每个表空间关联一个特定的shard。一个shard表的每一个分区放单独的表空间,并且每个表空间关联到一个特定的shard。根据不同的sharding方法,这个关联可以自动建立或者根据定义创建。尽管一个shard表的多个分区放在多个单独主机的数据库上(这些数据库完全独立,不共享CPU、内存等软件和硬件),但是应用访问表时就如同访问一个单独数据库中的分区表一样。应用发出的SQL语句不需要依赖shard号和shard的物理配置。
Oracle Sharding 使用 familiar SQL 语法创建表分区,指定分区表的每行数据如何分片。
一个shard表的分区键叫做sharding key,例如,下面的语法是典型的用来创建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
这个数据分片(shard)就是基于键值cust_id,分区采用“CONSISTENT HASH”,这是一个特定的hash分区类型,通常用在分布式系统上。
.
Sharding a Table Family
一个表家族(Table Family)中没有任何父表的表叫做根表(root table),每个表家族中只能有一个根表。
表家族中所有的表按照根表的主键进行sharding,根据各级表的结构,相关数据可以被存储在同一个shard上。
在12.2,在一个SDB中只支持一个表家族。
.
以下面的例子说明,这里一共3张表组成的表家族(Table Family):客户表,订单表和订单明细表。
每个客户可以有多个订单,每个订单中可以有多个商品,因此订单明细中就记录了每个订单中的多个商品,他们的具体数据如下:
在这个表族中,客户编号为123的数据如下:
将一个表族(Sharded Table Family)分片通常使有下面两种方法创建:
方法1:不显示指定父子关系,而是通过表之间主外键关系创建表族。
这种方式创建的表族是一个多级的树形结构。
根表(root table)是客户表:
–客户表的主键是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 –订单表是客户表的字表,子表(订单表)根据CustNo关联父表(客户表):
–订单表的主键是(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关联父表(订单表)–订单明细表的主键是(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) 因此,上面的例子中,这个表家族的所有数据都保存在同一个表空间集ts1中。当根表中增加一个分区的时候,那么相关联的表中都会自动增加相应的分区。
.
方法2:在分区表中显示指定父子关系的方法创建表家族这种分区方法只支持两级的表家族(two-level table families),所有的子表必须有相同的父表,父表的分区列在每个子表中都存在,例如下面的CustNo.
.
–没有关键字“PARENT”(也没有上面引用约束关键字)的是根表,即客户表(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 –根据关键字“PARENT Customers”指定了订单表(Orders)的父表是客户表(Customers)CREATE SHARDED TABLE Orders ( OrderNo NUMBER , CustNo NUMBER , OrderDate DATE ) PARENT Customers PARTITION BY CONSISTENT HASH (CustNo) TABLESPACE SET ts1 PARTITIONS AUTO –根据关键字“PARENT Customers”指定了订单明细表(LineItems)的父表是客户表(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上,这种在每个shard上有相同内容的表叫做复制表(Duplicated Table),需要经常跟shard表关联的小表适合于作为复制表(Duplicated Table),适用于:
(1)只读表
(2)大量跨shard的读 *** 作
Oracle Sharding使用Materialized View Replication来同步复制表(duplicated tables)的内容,每个shard上的duplicated tables的内容是一个只读物化视图(read-only materialized view)。
物化视图(materialized views)的主表保存在一个专门的数据库中,叫做Shard Catalog。
所有shard上的物化视图(materialized views)会根据配置的频率自动刷新。
创建复制表的语句“CREATE DUPLICATED TABLE”会自动创建master表,物化视图和其他物化视图复制所需要的对象。
还是以上面的客户订单关系为例,这里定义产品表(Products)为复制表:
CREATE DUPLICATED TABLE Products ( StockNo NUMBER PRIMARY KEY , Description VARCHAR2(20) , Price NUMBER(6,2)) ) 根据sharding的机制,sharding的设计对后续系统性能影响是非常大的。一旦sharding创建完成,并已经有很多数据,相关的属性就不能再修改了,比如某个表是复制表,还是sharding表,sharding key等等,因此,SDB的设计是至关重要的,在设计sharding时需要考虑的有:
哪些表需要被设计为sharding表;
哪些表需要做复制表;
哪些shard表是根表;
使用什么方法来关联一个表到其他表或者根表;应该使用哪种sharding方法;
使用哪个作为sharding key;
Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的 适应高吞吐量的数据库解决方案。
ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。ORACLE数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。
特点
1、完整的数据管理功能:[2]
1)数据的大量性
2)数据的保存的持久性
3)数据的共享性
4)数据的可靠性
2、完备关系的产品:
1)信息准则---关系型DBMS的所有信息都应在逻辑上用一种方法,即表中的值显式地表示;
2)保证访问的准则
3)视图更新准则---只要形成视图的表中的数据变化了,相应的视图中的数据同时变化
4)数据物理性和逻辑性独立准则
3、分布式处理功能:
ORACLE数据库自第5版起就提供了分布式处理能力,到第7版就有比较完善的分布式数据库功能了,一个ORACLE分布式数据库由oraclerdbms、sql*Net、SQL*CONNECT和其他非ORACLE的关系型产品构成。
4、用ORACLE能轻松的实现数据仓库的 *** 作。
这是一个技术发展的趋势,不在这里讨论。
优点
■ 可用性强
■ 可扩展性强
■ 数据安全性强
■ 稳定性强
实例
实例就是一组 *** 作系统进程(或者是一个多线程的进程)以及一些内存。这些进程可以 *** 作数据库;实例 就是治理相关库的内存结构的名字(由SGA、PGA、服务器进程、用户进程、后台进程等组成)
数据库
数据库只是一个文件集合(包括数据文件、临时文件、重做日志文件和控制文件)。在任何时刻,一个实例只能有一组相关的文件(与一个数据库关联)。数据库 就是实际的磁盘上的文件(数据文件、日志文件、控制文件等),负责保存数据,但由对应的实例来 *** 作它的数据
3.服务名
服务名 就是对外公布的名称,为网络监听服务
4.SID
sid用于实例区分各个数据库,service name用于外部链接。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)