后台开发中的分库分表技术

在上一篇《

基于Netty的日志采集中心设计与实现

》,我们收集到了来自各个业务系统的log4j日志,这个数据量很大,每天大概会收集到30w的请求量,一年下来大概会累计1.09亿的数据量,那么,海量的数据如何存放呢?

这篇文章将带你进入分库分表技术,目前市面上分库分表中间件比较多,我们这里选用Sharding-Sphere,这是官网的介绍:

Sharding-Sphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar这3款产品组成。3款产品提供标准化的数据分片、读写分离、柔性事务和数据治理功能,可适用于如Java同构、异构语言、容器、云原生等各种多样化的应用场景。

我们这里只使用Sharding-JDBC,结合SpringBoot最新版整合,官网并没有针对SpringBoot如何整合有个详细的demo地址,以下我们会给出,以下是我们的具体需求:

建立sharding_logging数据库两个,来自不同的物理机,分库;

每个sharding_logging数据库建立3个分区表t_logging0,t_logging1,t_logging2,分表;

订阅Redis频道,将收集到的所有log4j日志散列到这两个库,3个表,即每个表大概能拿到总数据量/6的数据量,按需你可以任意扩展库数量和表数量;

接下来,就开始动手吧,建立一个SpringBoot2的空项目,然后加入必要的依赖:

配置application.properties,定义分库分表规则:

如果你采用读写分离,也是支持的,只要定义好数据源后,定义分离规则即可:

全部建立好后,通过依赖注入,将DataSource拿到即可,你可以定义一个Service:

最后程序输出:

可以看到,每条日志都会被散列到库和相应的分区表中,这样你再也不用担心某个表数据太多影响数据库性能和查询速度了,更牛逼的是不光支持MySQL,SQLServer和Oracle也是支持的,至于查询和插入,按标准的JDBC来写就可以了,比如INSERT你只需要使用逻辑表名(就是配置文件的逻辑表名,如下图红线框)就可以了:

中间件会自动散列到如ds0.t_logging2表中。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180718G1V6YM00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券