APP下载

探索数据库分片技术

2017-03-09

网络安全和信息化 2017年6期
关键词:分片数据表实例

MySQL数据库的拆分方法

拆分的方法有多种,例如将原来主服务器上多个数据库拆分到不同物理服务器的数据库实例中。在一个MySQL数据库中可能包含多个逻辑数据库,在某个MySQL节点中存在多个逻辑数据库,该节点不是一台单一的MySQL数据库服务器,而是MySQL数据库集群,而且其中的所有数据库中数据是一致的。

拆分的方法是将该节点中的不同数据库拆分到不同的节点上。假设节点1中原本存在产品库、销售库、仓储库,可以将其进行拆分,让节点1中只包含产品库,让节点2只包含销售库,让节点3只包含仓库库。这样,就将原来节点1的写压力分担到了三个节点上,大大减轻了MySQL节点一的负担,提高了数据库的运行效率。

这种拆分方式的特点是实现起来比较简单,适用于不允许跨库查询的情况。只要对拆分后的数据库重新配置连接,即可让其正常运转。其缺点是无法分担针对单个数据库的写压力。例如,销售库承担了主要的写压力,别的数据库读写的压力很轻,那么这样的拆分就意义不大。

为此,可以将原来数据库中的表分离到不同节点中的不同数据库中。在一个数据库中会存在很多表,分别存储不同类型的数据。例如对于节点1中的产品库来说,可能包含衣服表、鞋帽表、食品表等,根据实际的分析,发现写压力主要集中在衣服表和食品表中,那么可以将这两个表拆分到不同的数MySQL节点中。这样,不同的节点只承受的只是原来数据库中部分写压力。

我们还可以使用数据表的水平拆分加以应对。水平拆分即对数据库进行分片处理,对一个数据库中的相关表进行水平拆分,存放到不同实例的数据库中。在大多数情况下,MySQL的分库分表就是指的该种方式。

数据库分片的得失探讨

在实际的项目规划中,如果没有必要最好不要进行分片处理。当相关业务正常运行时,如果数据库的并发操作没有达到临界值,就贸然对其进行分片,反倒变得难以维护,对运维产生不利影响。为了提高运维效能,应该首先考虑通过性能调优或者提高应用程序以及数据库设计水平,来推迟分片操作。

例如,对于上述产品库中的衣服表来说,当需要对其进行分片时,假设在节点1上只存在一个数据库,其中只包含该数据表,经过分片处理后,会形成多个相同表结构的衣服表,这些表可能分布在不同的节点上。在对数据库进行分片前,需要充分考虑到可能涉及到的问题。

如何选择分区键决定了如何对数据库进行分片,以及分片后如何查询数据。分区键选择的是否合适,直接决定了分区后数据库的性能。在选择分区键时,要尽可能的尽量避免发生跨分片查询的情况。因为在这种情况下,应用程序必须对多个分片进行查询后才可以合并查询的结果信息,其效率甚至比分片前还要低。

例如,对于一个论坛来说,一个用户可能在不同的板块发布多篇帖子。如果以板块的ID作为分区键,那么在查询某个用户时,就会跨所有的分区进行查询,才能得到该用户的所有帖子信息。如果以用户的ID为分区键,可以保证同一个用户的帖子全部在一个分片中,这样查询起来就更加快捷。

数据库分片的常用方法

分区键的选择要尽可能让各个分片中的数据保持平均分布。之所以进行数据库分片,是为了降低主数据库的写负载。如果分片后,大量的写操作依然集中在某个分片中,就没有必要进行分片。

对于一个在线订单库来说,如果以买家的ID为分区键,并且采用ID范围来分片的话,就必须保证选择的ID非常合理,大部分活跃的买家是否被分到了一个段中。如果分片后,所有的查询都包含该分区键,使用哈希函数进行分区,无疑是最好的分区方式。

不管对于任何应用程序来说,往往只有少量的数据表需要进行分片处理,即只有少数的表才会被频繁的写入数据。

对于其他数据表来说,在分片后,可以在每个分片中存储一份相同的数据。这就要求这些表数据量较小,不会被经常更新,而且这些表经常会被和分区表在一起进行关联查询,这样在每一个分片中存储一份冗余的数据表,可以提高查询的效能。

当然,为了避免繁琐的定期维护操作,可以将无需分片的数据表统一存储在一个额外的节点中,让整个MySQL集群不存在冗余问题。如果分片的表和这些表进行关联查询,就必须在应用程序中进行设置,对两类数据表进行分别查询并进行合并处理。因此,该方法的查询效率较低。在节点上部署分片时,并不是在一个节点上只能部署一个分片,而是有很多种方式可以选择。最简单的方式是每个分片使用单一的数据库,数据库的名称也保持一致。即每个数据库的结构需要和原来单一实例上的数据库结构相同。

也可以将多个分片表存储在一个数据库中,需要在对应的表名称上加入分片号作为后缀,来进行明确的区分。

此外,还可以在每一个节点中部署多个数据库,每个数据库包含一个或者分片。之后按照上述方法对相关的数据库和分片表进行区分。在一个节点中存储多个数据库实例的方法,也可以实现分片处理。

不管采用哪一种方法,相关的应用程序必须进行必要的调整,来匹配所采用的分片方式。如果在错误的分片中查询数据,或者将数据写入错误的分片,就会造成管理上的混乱。

猜你喜欢

分片数据表实例
上下分片與詞的時空佈局
降低跨分片交易回滚概率的多轮验证方案
分片光滑边值问题的再生核方法
湖北省新冠肺炎疫情数据表(2.26-3.25)
湖北省新冠肺炎疫情数据表
基于模糊二分查找的帧分片算法设计与实现
基于列控工程数据表建立线路拓扑关系的研究
图表
完形填空Ⅱ
完形填空Ⅰ