问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

oracle 12c sharding 有什么好处

发布网友 发布时间:2022-04-27 10:35

我来回答

2个回答

懂视网 时间:2022-05-01 13:32

1. 如何理解定义

    在中文中,partitioning和sharding都有分区的意思。从大的方面来说,这两个词所执行的动作确实也和分区相关。partitioning在很多场合是vertical partitioning的简称,那么自然而然,sharding就是horizon partitioning了。但是此时又引入了两个名词,vertical和horizon。在什么东西上进行vertic和horizon进行操作?区别在哪里?

 

2.从一个特定点出发

    要理解vertical partitioning和horizon partitioning,那么就应该知道这是站在什么角度去区分这两个动作。显然,我们一直在讨论的是数据,那么当然就是站在数据行的角度了。

    vertical partitioning指的是将逻辑的数据行打散到多个数据行中(但是还是在同一个物理机上)。这么做的理由可以是为了性能、可用性或者可维护性。

    horizon partitioning(sharding)指的是将存储的数据分散到多个物理机上。但是每个数据行的列是相同的。这么重的理由同样可以是为了性能、可用性或者可维护性。

3.总结

        vertical partitioning是列(column)的角度去分区,而horizon partitioning是从行(row)的角度去分区。

4.引用

1.https://www.quora.com/Whats-the-difference-between-sharding-DB-tables-and-partitioning-them

2.http://stackoverflow.com/questions/20388923/database-partitioning-horizontal-vs-vertical-difference-between-normalizatio

[原]数据库中的partitioning和sharding

标签:

热心网友 时间:2022-05-01 10:40

  2015年8月份内部release了Oracle 12.2 Beta版本(目前内部最新release的版本是2016年2月份发布的,windows和Linux都有了),目前根据12.2beta文档的介绍,Oracle推出了sharding的功能,跟其他NOSQL型的sharding结构相比,Oracle Sharding提供的是企业级的RDBMS的分片技术。
  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来同步复制表(plicated tables)的内容,每个shard上的plicated tables的内容是一个只读物化视图(read-only materialized view)。
  物化视图(materialized views)的主表保存在一个专门的数据库中,叫做Shard Catalog。
  所有shard上的物化视图(materialized views)会根据配置的频率自动刷新。
  创建复制表的语句“CREATE DUPLICATED TABLE”会自动创建master表,物化视图和其他物化视图复制所需要的对象。
  还是以上面的客户订单关系为例,这里定义产品表(Procts)为复制表:
  CREATE DUPLICATED TABLE Procts ( StockNo NUMBER PRIMARY KEY , Description VARCHAR2(20) , Price NUMBER(6,2)) ) ;根据sharding的机制,sharding的设计对后续系统性能影响是非常大的。一旦sharding创建完成,并已经有很多数据,相关的属性就不能再修改了,比如某个表是复制表,还是sharding表,sharding key等等,因此,SDB的设计是至关重要的,在设计sharding时需要考虑的有:
  哪些表需要被设计为sharding表;
  哪些表需要做复制表;
  哪些shard表是根表;
  使用什么方法来关联一个表到其他表或者根表;应该使用哪种sharding方法;
  使用哪个作为sharding key;
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? 后背右侧肉板结硬原因 请问oracle数据库中该如何设计分区索引partition index? 为什么背上有两块小肉?硬硬的. oracle一张上千万记录的数据表需要改为分区表,用什么方法好? 背部肌肉僵硬疼痛是怎么回事 oracle关于数据存储和分配存储的问题。请各位大神帮忙,谢谢了。 我的背部肌肉发硬,偶尔感觉疼痛!是怎么回事? 为什么后背的肉又硬又厚 背部肌肉硬化怎么办?早上起床前整个背部都很僵硬,疼痛感很明显! oracle可以同时使用列表分区和HASH分区吗,具体怎么使用,为什么我试的时候老出错? oracle 用hash分区效率高吗 oracle11g hash 分区 索引怎么用 梦到踩仙人掌,求解梦 有哪个朋友知道,梦见种仙人掌,是什么意思? 梦见很多仙人掌是怎么回事? 大王乌贼的体型是怎样的? 最大乌贼有多大??? 梦见把仙人掌从脖子后面拔下来 没有连根拔下 求大神解梦 世界上最大的乌贼是不是海王乌贼?? 梦见仙人掌连根拔回家 什么原因会导致背部肌肉疼痛僵硬呢 oracle分区表的本地索引和全局索引有何不同 后背右腰部有巴掌大一块肉死硬死硬, 怎么回事? 左侧背部肌肉有僵硬感,但不疼痛。不知道是怎么回事,很难受,已经有好几个月了 后背肌肉僵硬疼痛伴有腰痛 ArcMap如何打开多个图幅在一个图层上显示 arcgis 批量裁剪栅格数据 arcgis中怎样用moduler批量裁剪文件 arcgis悬挂点伪节点有没有批量修改的方法 arcgis怎么按矢量的标准图幅批量裁剪栅格图像,用批量mask报错,栅格的像元大小是一样的,还是报错 arcgis 批量裁剪矢量图 arcgis中使用extract by mask批量裁剪栅格影像,输出格式为何都是adf格式的? arcgis9.3怎样批量裁剪影像 arcgis指定面积切割 arcgis如何用分区好的栅格文件来对dem进行分割 arcgis怎么批量提取提取多幅栅格图的公共部分 请教,怎样解决在纯UEFI启动模式下引导32位PE的问题 求助UEFI32位启动U盘装系统 如何把uefi模式模式改为pe 在BIOS uefi模式下如何进去pe系统