闲聊sharding database架构

今天我们来闲聊一下sharding的架构。在开始闲聊之前,如果你没阅读我前面两篇的文章,推荐你先阅读一下这两篇,以便对oracle sharding database有个初步的了解。
『Oracle sharding database的一些概念』『创建Oracle sharding database』

关于sharding的架构,你在第一篇文章中可以看到各种术语,你在第二篇文章中也可以看到非常多的部署的步骤,我们脱离繁琐细小的东西,站到高处来看一下就是什么是oracle的sharding。

爱因斯坦说过,如果你不能用简单的语言解释某个东西,你就不是真正的理解这个东西。通过这几天的实验和学习,我尽量用简单的语言来给大家描述下什么是oracle的sharding。

sharding,中文名叫数据分片,是对数据进行横向扩展的一种方式。数据量增加,我可以通过加一台机器,来扩展其容纳能力和处理能力。Sharding其实需要解决三个问题:一、数据的路由,二、数据的分片,三、分片的元数据信息保存。

1.数据路由是数据库告诉应用程序,你让我查的数据目前在哪个分片上,这条路怎么走过去。
2.数据分片就是实际数据的存放地点,往往每个分片就是一台单独的服务器(含存储)。
3.由于分片的数据实际是被切割放在不同的机器上,那么需要有个集中的地点存放数据分片的信息,即分片元数据的信息。

应用问路由怎么走,路由去查询元数据得知需要的数据在哪个分片上,最终应用访问到该分片上。

最著名的sharding database就是mongoDB了。mongoDB的sharding功能的架构也是为了解决上面的三个问题,MongoDB有路由服务器(Router)解决路由问题,分片服务器(Shard)存储实际数据(可能还有副本和仲裁),以及配置服务器(Config Server)存放分片元数据。

那么,对应在Oracle12.2的sharding DB上,就是GDS框架(GSM,shard directors),shard node,和shardcat数据库。

所以,到这里你就可以比较清楚的了解了oracle 12.2的sharding功能其实就是3个模块。

顺便说一下,MonogoDB支持多个副本和仲裁,oracle的adg也同样支持一主多备,由FSFO进行管理。

下面,再谈一下我个人对sharding架构的一些看法。

(1)Shardcat是非常重要的一个模块,上面不仅仅有分片的元数据信息,还有duplicated table的master table信息,另外,当进行cross shard query的时候,他还起着coordinator database的作用。所以建议对这个部分搭建RAC+adg架构,避免shardcat的单点故障。

(2)shard node,单个shard node的失效,将导致整个表的不可用。所以我们也要对shard node建立高可用的副本,这里可以用ADG或者OGG的技术。

(3)既然做sharding,又要在做HA,那么就变成了堆机器,堆存储的方式了。我们假设在一个10个shard node的环境,需要多少台机器:一个shardcate,做rac+adg,那么最少就是3台;10个shard node,如果都有adg,那么最少就是20台。那么当前这个环境,就至少要23台机器了。

(4)Sharding架构极其考验对应用的熟悉程度,需要配合应用进行合理的分区和分片。另外,如sharding key必须建索引,sharding的方式可以有一致性hash,让数据均匀分布,也还是可以是range或者list分区,或者hash-range,hash-list的子分区。分片和分区方式需要结合业务,有些场景需要相关数据都在一个分区,避免cross shard join,有些场景需要均匀分片,禁止集中分片,导致热块数据都在一个分片上(如序列增长,做range分区,热点数据将会都在一个分片上)。

(5)事实表和维度表,似乎可以很好的利用sharding功能。维度表做duplicated table,而事实表做sharded table。

相关文章

4条评论

  1. Hi,

    对12c的sharding很感兴趣,但我找不到12cR2的文档,能否发一份下载地址到我邮箱呢?多谢多谢!

  2. re robo:12.2目前还没有发布,所以文档目前还是internal的。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据