嘉兴网站建设低价推荐网站开发 印花税

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

嘉兴网站建设低价推荐,网站开发 印花税,最新73种暴利产品竞价单页网站制作带订单后台系统模板,一家专门做打折的网站一、概述 分库分表是在面对高并发、海量数量时常见的数据库层面的解决方案。通过把数据分散到不同的数据库中#xff0c;使得单一数据库的数据量变小来缓解单一数据库的性能问题#xff0c;从而达到提升数据库性能的目的。比如#xff1a;将电商数据库拆分为若干独立的数据…一、概述 分库分表是在面对高并发、海量数量时常见的数据库层面的解决方案。通过把数据分散到不同的数据库中使得单一数据库的数据量变小来缓解单一数据库的性能问题从而达到提升数据库性能的目的。比如将电商数据库拆分为若干独立的数据库并且对于大表来说也拆分为若干小表通过这种数据库拆分的方法来解决数据库的性能问题。 数据库分布式核心内容无非就是数据切分Sharding以及切分后对数据的定位、整合。数据切分就是将数据分散存储到多个数据库中使得单一数据库中的数据量变小通过扩充主机的数量缓解单一数据库的性能问题从而达到提升数据库操作性能的目的。 分库分表顾名思义可以从两个角度来实现一个是对数据库进行拆分另一个是对表进行拆分。 二、分库 分库主要是解决高并发的瓶颈问题由于和数据库实例建立连接会消耗资源所以不可能无限的分配连接资源当对数据库的访问的QPS比较高时就会对数据库实例造成很大的压力并同时降低数据查询效率 。MySQL 中可以使用 max_connections 查看默认的最大连接数当访问连接数过多时就会导致连接失败此时将对一个数据库实例的操作拆分成对多个数据库实例的操作能有效降低这种压力。 那如何进行分库呢在微服务架构中通常会按照业务对数据库进行拆分将业务关联度低的表划分到不同的数据库中关联度高的表划分到相同的数据库中这一般和微服务实践的服务拆分同时进行。 三、分表 分表操作主要是为了解决数据量大的问题但一张表中数据量过大对该表的读写操作都会效率低下这种情况可以对单表进行拆分操作。 通常意义上单表行数超过 500 万行或者单表容量超过 2GB之后才需要考虑做分库分表了。常见的拆分模式分为水平拆分和垂直拆分。 1.水平拆分 水平拆分是将原始表按照一定的规则或策略分为多张子表每张子表的字段数量没有变化但是总记录数降低了这样能够提高读写的效率。 优点 不存在单库数据量过大、高并发的性能瓶颈提升系统稳定性和负载能力应用端改造较小不需要拆分业务模块 缺点 跨分片的事务一致性难以保证跨库的join关联查询性能较差数据多次扩展难度和维护量极大 一般水平拆分的策略包括Hash取模拆分、按时间范围拆分、按空间范围拆分等。 2.垂直拆分 垂直拆分是将原始表的字段拆分成几组分别用不同的子表来保存适合单表中字段已经非常多的情况相较于水平拆分垂直拆分的记录数量不会变但单表的字段减少。在对字段进行垂直拆分的时候需要区分哪些字段是热点字段哪些字段是不常访问字段对于热点字段可以单独拆分成一张表单独访问。 优点 解决业务系统层面的耦合业务清晰与微服务的治理类似也能对不同业务的数据进行分级管理、维护、监控、扩展等高并发场景下垂直切分一定程度的提升IO、数据库连接数、单机硬件资源的瓶颈提升读写的效率并能够降低死锁的概率。 缺点 部分表无法join只能通过接口聚合方式解决提升了开发的复杂度分布式事务处理复杂依然存在单表数据量过大的问题需要水平切分 在实际运用中一般先考虑垂直拆分再考虑水平拆分原因是水平拆分是将完整的记录被拆分到多表需要解决多表关联查询等问题而垂直拆分由于单表记录保存完整只需要通过外键就能关联到子表相对而言引入的问题更少。 Mysql本身也实现了分片存储的方案将一张表分成N多个小表分片是把一张表的数据分成N多个区块这些区块可以在同一个磁盘上也可以在不同的磁盘上。mysql的分表是真正的分表一张表分成很多表后每一个小表都是完整的一张表都对应三个文件一个.MYD数据文件.MYI索引文件.frm表结构文件。 四、常见问题 1.数据倾斜 通过Hash取模的方法解决数据倾斜的问题对分片键进行Hash取模操作后再入库操作。 在使用Hash取模的方式对数据进行分片当子表数量扩容后所有老的数据再通过Hash取模可能都无法命中存储的子表这种情况可以通过一致性Hash算法来解决。 一致性哈希可以按照常用的hash算法来将对应的key哈希到一个具有2^32次方个节点的空间中形成成一个顺时针首尾相接的闭合的环形。所以当添加一台新的数据库服务器时只有增加服务器的位置和逆时针方向第一台服务器之间的键会受影响。 2.跨节点多表关联查询 切分之前系统中很多列表和详情页所需的数据可以通过sql join来完成。而切分之后数据可能分布在不同的节点上此时join带来的问题就比较麻烦了考虑到性能尽量避免使用join查询。 全局关联表 常见的思路是在每个节点上都维护一个单独的全局关联表保存需要查询的多表关联关系。 冗余字段 另一种思路是维护冗余字段用来关联其他表的主键信息。这是一种用空间换时间的思路。 3.跨节点分组和排序 对于跨节点的分组和排序操作由于数据记录可能分散在不同的节点一般是先读到内存中再进行分组和排序操作。 4.分布式事务 参考《分布式事务》一文 5.分布式ID 参考《分布式ID》一文 五、总结 优先考虑对表中索引和SQL进行优化再考虑通过分库分表来进行优化原因是分库分表对架构变更过大并且对业务的侵入性过高并且会引入很多的衍生问题。 一般的分库分表实践步骤根据容量当前容量和增长量评估分库或分表个数 - 选key均匀- 分表规则hash或range等- 执行一般双写- 扩容问题尽量减少数据的移动。 参考资料 再有人问你什么是分库分表直接把这篇文章发给他https://www.51cto.com/article/709614.html 大众点评订单系统分库分表实践https://tech.meituan.com/2016/11/18/dianping-order-db-sharding.html MySQL分库分表方案https://zhuanlan.zhihu.com/p/84224499 互联网公司常用MySQL分库分表方案汇总https://cloud.tencent.com/developer/article/1713512 好好的系统为什么要分库分表https://www.cnblogs.com/chengxy-nds/p/16924305.html 实战彻底搞清分库分表垂直分库垂直分表水平分库水平分表https://cloud.tencent.com/developer/article/1819045