前言
我们说了ShardingSphere的读写分离,使用读写分离能够减轻单库的读写操作,从而提升数据库的吞吐量,但是当数据库中表的数据量到达一定数量时,我们可能就会需要进行分片了,分片又分为垂直分片和水平分片,下面我们对二者进行简单的分析。
垂直分片
我们的一个数据库中通常是有很多数据表的,不过可能由于我们的分类不到位,就会出现涝的涝死旱的旱死的局面,比如某些数据表的读写操作十分频繁,而我的这个库中大量的集中了这种读写操作频繁的表,那么整体的吞吐量就会降低,而某个库中又集中了读写不频繁的表,吞吐量十分的高(但是好像没什么卵用),所以我们应该合理的分配,以保证整理的吞吐量达到最大值,下图将数据表各分到了一个数据库中。
不过垂直分片不能从根本上解决读写瓶颈,因为不管你再怎么分,所有的数据始终都集中在一张表里面,就算数据库的性能再好,也解决不了这个问题。所以我们需要进行更加细粒度的划分,下面我们来讲解水平分片。
水平分片
水平分片又可以叫做横向拆分,就是将一张大表拆分为若干张小表,比如我一张表中有1亿条数据,那么我拆分为10张表,每张表中存万条数据,那么效率就会变高,还有些数据需要进行分类和归档,那么我们也需要进行分表,之前我们系统中一个表用来存储文档信息,有十多年因为数据量十分庞大,在业务中需要对文档进行排序等操作,本来查询就比较耗时了,再加上需要进行逻辑上的处理,所以就更加耗时,于是就进行了分表,将每一年的数据存进一个表,这样就提高了查询效率,并且更加容易对数据进行追踪和管理,如下就是水平分片的图例。
ShardingSphere数据分片实战
使用ShardingSphere数据分片,我们只需通过简单的配置就能实现,ShardingSphere帮我们屏蔽了底层逻辑,我们也可通过ShardingSphere预留的接口和SPI进行扩展我们的需求,比如可以实现我们自己的分片算法,主键生成策略等等。
下面演示将文档按照年份进行分表,将文档数据分表至年至年来存,一般我们的配置文件都是配置在nacos上面,所以能够灵活的进行配置,当到了年,我们可以添加一个年的表,改下nacos的配置,当然,一般会先预留出数据表,nacos上面也留出空间,我们的是预留到年,留出了10年。
yml文件
我们重点