关于对“数据”进行分库分表 性能优化 解决方案设计

1.水平拆分方法

(1)范围法(自增长唯一标识进行数据拆分)

(2)hash法(通过对数据的唯一标识进行计算取模,路由到对应的库表)

 

2.水平拆分后碰到问题

1.对于只通过唯一标识进行查询业务,很好解决,直接哈希 唯一标识即可,但是通过非 “主属性” 进行 查询就有问题了。无法进行路由选择。

2.那么问题产生的具体业务是什么?举例说明:用户登录:可能输入账户号、邮箱号、手机号进行登录。但是这些都不属于 主属性。那么业务服务发起查询请求的时候,怎么给其路由到对应的分库中呢?这就是需要设计解决方案了。管理类业务:基本上不关注具体某个用户的数据,通常来说,都是站在某个维度进行访问数据。例如,管理员需要查询状态为屏蔽的用户有哪些?管理员需要查询最近七天活跃的用户有哪些?这些角度都是站在纵向的角度进行操作。那么就导致了一个问题,产生了分库分表操作后,业务将不能进行。

 

3.解决方案

建立起 非主属性 与主属性之间的关系。产生关系映射。那么建立一张表,这张表中 存储了 用户ID与 用户状态、用户最近活跃时间。那么我们就可以通过查询 “禁用”的状态的 用户ID有哪些?就可以查询出“近期活跃”的用户ID有哪些?然后进行正常的业务操作了。

那么说到这个地方,那可能有童鞋会疑问,通常来说,正常人的思维不都是 以 ID 查询 NAME吗?这里为什么用NAME查询 ID?合适吗?方便吗?那么这个使用就可以使用 “倒排索引”的概念了。 依照之前写的一篇文章:什么是 ES?什么是倒排索引。那篇文章解释了,看一下你就会回来说,诶,是这么个道理诶。

 

 

4.线上环境如何 优雅的扩容(PS:不停服,更新???)

王者荣耀,刺激战场,很火爆。相信很多人都会在不同的时间段进行玩这个游戏。那服务器怎么扩容呢?随着用户量的激增,那么数据库的读写性能也会随着降低,怎么解决呢?需要扩容的话,怎么做到用户无感知扩容呢?相信很多老玩家肯定碰到过“王者荣耀更新公告:不停机升级。” ”王者荣耀更新公告:停服 0:00 ~ 23:59,升级“。那么停服升级,我们可以很好理解,停服升级嘛:构建N个新的库,结构一致,那么将路由扫描进行添加这N个库,就可以取模运算到N库中。然后将对应的原Old库中的数据,重新取模运算,如果是其他库的,将进行数据迁移。将老数据进行新的均衡分配。那么再重新启动服务,那就完成了数据库的升级扩容,并且解决了老数据迁移问题。

但是有个问题:停服扩容固然好用。但是不够优雅,对于用户角度来说,只是一个升级扩容,不是什么大动作。直接停服了。那用户体验很差。那下面就说一下 优雅扩容的 解决方案:

  1. 举例说明:原 2个库,现准备增加 2个库。

  2. 那么原 2个库 中有 5个用户了。 用户1、用户3、用户5 原先路由到db1; 用户2、用户4 原先路由到db2;

  3. 那现在 第一步;先搭建好 对应的2 个库。建立为对应,分别建立同步关系(触发器) db3 同步 db1 中数据; db4 同步 db2 中的数据;然后现在情况是:用户1、用户3、用户5使用 db1 中的 数据, 那么db3可以理解为从库,保持与db1中的数据一致。 同理:db2 与 db4;

  4. 然后,修改服务的配置,将2个库改为4个库,重启业务服务,那新的路由策略生效,用户1、用户3路由到db1; 用户2原先路由到db2; 用户5路由到db3; 用户4原先路由到db4; 业务正常进行

  5. 再断开db3对主库的同步、断开db4对主库的同步。保证其他脏数据不再增涨,然后将四个库中属于其他库的数据全部清空。那么完成数据收缩操作。

  6. 完成优雅的数据库扩容操作。其他操作也同理。

 

 

思路来自互联网中某个大佬,用自己的语言描述了一下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值