当前位置: 首页 > article >正文

9.28学习

1.如何进行分库分表

分表用户id进行分表,每个表控制在300万数据。

分库根据业务场景和地域分库,每个库并发不超过2000

 

Sharding-jdbc 这种 client 层方案的优点在于不用部署,运维成本低,不需要代理层的二次转发请求,性能很高,但是各个系统都需要耦合 Sharding-jdbc 的依赖,升级比较麻烦

 

Mycat 这种 proxy 层方案的缺点在于需要部署,自己运维一套中间件,运维成本高,但是好处在于对于各个项目是透明的,如果遇到升级之类的都是自己中间件那里搞就行了

 

水平拆分:一个表放到多个库,分担高并发,加快查询速度

 

id保证业务在关联多张表时可以在同一库上操作

range方便扩容和数据统计

hash可以使得数据更加平均

 

垂直拆分:一个表拆成多个表,可以将一些冷数据拆分到冗余库中

 

不是写瓶颈优先进行分表

 

分库数据间的数据无法再通过数据库直接查询了。会产生深分页的问题

 

分库越多,出现问题的可能性越大,维护成本也变得更高。

 

分库后无法保障跨库间事务,只能借助其他中间件实现最终一致性。

 

分库首先需考虑满足业务最核心的场景:

①订单数据按用户分库,可以提升用户的全流程体验

②超级客户导致数据倾斜可以使用最细粒度唯一标识进行hash拆分

③按照最细粒度如订单号拆分以后,数据库就无法进行单库排重了

 

三个问题:

富查询:采用分库分表之后,如何满足跨越分库的查询?使用ES的宽表

借助分库网关+分库业务虽然能够实现多维度查询的能力,但整体上性能不佳且对正常的写入请求有一定的影响。业界应对多维度实时查询的最常见方式便是借助 ElasticSearch

数据倾斜:数据分库基础上再进行分表

分布式事务:跨多库的修改及多个微服务间的写操作导致的分布式事务问题?

深分页问题:按游标查询,或者叫每次查询都带上上一次查询经过排序后的最大 ID

 

2.如何将老数据进行迁移

双写不中断迁移

线上系统里所有写库的地方,增删改操作,除了对老库增删改,都加上对新库的增删改

系统部署以后,还需要跑程序读老库数据写新库,写的时候需要判断updateTime

循环执行,直至两个库的数据完全一致,最后重新部署分库分表的代码就行了

 

3.系统性能的评估及扩容

和家亲目前有1亿用户:场景 10万写并发,100万读并发,60亿数据量

设计时考虑极限情况,32库*32表~64个表,一共1000 ~ 2000张表

支持3万的写并发,配合MQ实现每秒10万的写入速度

读写分离6万读并发,配合分布式缓存每秒100读并发

2000张表每张300万,可以最多写入60亿的数据

32张用户表,支撑亿级用户,后续最多也就扩容一次

 

★动态扩容的步骤

①推荐是 32 库 * 32 表,对于我们公司来说,可能几年都够了。

②配置路由的规则,uid % 32 = 库,uid / 32 % 32 = 表

③扩容的时候,申请增加更多的数据库服务器,呈倍数扩容

④由 DBA 负责将原先数据库服务器的库,迁移到新的数据库服务器上去

⑤修改一下配置,重新发布系统,上线,原先的路由规则变都不用变

⑥直接可以基于 n 倍的数据库服务器的资源,继续进行线上系统的提供服务。

 

4.如何生成自增的id主键

●使用redis可以

●并发不高可以单独起一个服务,生成自增id

●设置数据库step自增步长可以支撑水平伸缩

●UUID适合文件名、编号,但是不适合做主键

●snowflake雪花算法,综合了41时间(ms)、10机器、12序列号(ms内自增)

 

其中机器预留的10bit可以根据自己的业务场景配置

 

 

 

 

 

 


http://www.kler.cn/a/324062.html

相关文章:

  • 高亚科技签约美妥维志化工,提升业务协同与项目运营效率
  • 【解决】Layout 下创建槽位后,执行 Image 同步槽位位置后表现错误的问题。
  • C语言之MakeFile
  • 论文阅读 - Causally Regularized Learning with Agnostic Data Selection
  • 学习rust语言宏之macro_rules!
  • uniapp ios app以framwork形式接入sentry
  • 人工智能的基本概念与发展历程
  • 【第十四章:Sentosa_DSML社区版-机器学习之时间序列】
  • 从碎片到整合:EasyCVR平台如何重塑城市感知系统的视频数据生态
  • 【matlab画多纵坐标图像】
  • io流(学习笔记04)io流的概述
  • 看Threejs好玩示例,学习创新与技术(Noise)
  • 饿了么 表单 回填后 无法更新 问题
  • Rider快捷键笔记
  • 计算机视觉方面的一些模块
  • Linux下如何实现不用加路径调用启动脚本
  • IP地址与智能家居能够碰撞出什么样的火花呢?
  • 【自动驾驶】对2D框的四条边同时缩进
  • [JavaEE] IP协议
  • 【韩顺平Java笔记】第2章:Java概述
  • Elasticsearch、ik分词器、elasticsearch-head、Kibana的认识与安装
  • mysql手册17_经验总结
  • 【LeetCode:219. 存在重复元素 II + 哈希表】
  • HTTP 1.0 2.0 3.0详解
  • 【网站架构部署与优化】nginx反向代理
  • Leetcode 45-跳跃游戏 II