加入收藏 | 设为首页 | 会员中心 | 我要投稿 西安站长网 (https://www.029zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

数据库之分库分表-垂直?水平?

发布时间:2019-03-07 08:47:11 所属栏目:建站 来源:尜尜人物
导读:副标题#e# 一、数据库瓶颈 不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值。在业务Service来看就是,可用数据库连接少甚至无连接可用。接下来就可以想象了吧(并发量、吞吐量、崩溃)。 1

端上除了partition key只有一个非partition key作为条件查询

映射法

基因法

注:写入时,基因法生成user_id,如图。关于xbit基因,例如要分8张表,23=8,故x取3,即3bit基因。根据user_id查询时可直接取模路由到对应的分库或分表。
根据user_name查询时,,先通过user_name_code生成函数生成user_name_code再对其取模路由到对应的分库或分表。id生成常用snowflake算法。

端上除了partition key不止一个非partition key作为条件查询

映射法

冗余法

注:按照order_id或buyer_id查询时路由到db_o_buyer库中,按照seller_id查询时路由到db_o_seller库中。感觉有点本末倒置!有其他好的办法吗?改变技术栈呢?

后台除了partition key还有各种非partition key组合条件查询

NoSQL法

冗余法

2、非partition key跨库跨表分页查询问题(水平分库分表,拆分策略为常用的hash法)

注:用NoSQL法解决(ES等)。

3、扩容问题(水平分库分表,拆分策略为常用的hash法)

水平扩容库(升级从库法)

注:扩容是成倍的。

水平扩容表(双写迁移法)

  • 第一步:(同步双写)应用配置双写,部署;
  • 第二步:(同步双写)将老库中的老数据复制到新库中;
  • 第三步:(同步双写)以老库为准校对新库中的老数据;
  • 第四步:(同步双写)应用去掉双写,部署;

注:双写是通用方案。

六、分库分表总结

  • 分库分表,首先得知道瓶颈在哪里,然后才能合理地拆分(分库还是分表?水平还是垂直?分几个?)。且不可为了分库分表而拆分。
  • 选key很重要,既要考虑到拆分均匀,也要考虑到非partition key的查询。
  • 只要能满足需求,拆分规则越简单越好。

七、分库分表示例

示例GitHub地址:

https://github.com/lc-study/study-sharding.git

【编辑推荐】

  1. 送给DBA,让数据库自己解决繁琐调参!
  2. 如何半天搞定数据库迁移10亿级数据
  3. PingCAP CTO 黄东旭:我眼中的未来数据库技术趋势
  4. 3 月数据库排行:MySQL 指数持续大涨,PostgreSQL 下跌
  5. 推荐 | 超实用的MySQL数据库乱码问题的对应方式
【责任编辑:庞桂玉 TEL:(010)68476606】
点赞 0

(编辑:西安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读