热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

浅谈分库分表

0概述本文将为什么要分库分表、怎么分以及分库分表后带来的问题,来谈一谈分库分表的相关知识。1为什么要分库分表为什么要分库分表,正面来回答这个问题,可能不是很好回答,那么我们

0 概述

本文将为什么要分库分表、怎么分以及分库分表后带来的问题,来谈一谈分库分表的相关知识。

1 为什么要分库分表

为什么要分库分表,正面来回答这个问题,可能不是很好回答,那么我们从反面来看,如果不分库分表将会带来什么问题呢?
1.如果有新的需求,需要变更表的字段,那么就需要提交DDL,执行DDL时候是需要锁表的,如果此时表中数据过大就会导致锁表时间过长。
2.表中数据过大,DML性能下降,如果量比较大,rt会变高
3.单机性能极限,采用一主多从策略,读写分离,写的请求落在主节点上,读的请求落在从库上,但是如果从库过多会导致主从延时比较长,写入的数据不能立刻查到,这个需要看具体业务场景,是否需要强制查询主库。

2 怎么分

首先我们要选择一个分表字段(一般是业务的主键 比如订单Id),然后水平拆分(分表字段取模分表总数),那么怎么选择这个分表字段呢主要需要考以下几点:
1.是否便于查询,比如订单表,我们也可以按照订单Id,也可以按照用户Id来分。但是有时候,我们希望分库分表后能够满足两个Id查询,比如订单Id和userId,希望同一个userId的所有订单都落到同一张表中,这样就可以采用组合方的式生成分表字段订单Id(全局自增主键+userId后四位),这种组合方式生成订单Id做分表字段,即可用满足订单Id查询又可以满足用户Id查询。
2.数据分配是否相对均匀,不会出现数据的倾斜问题,如果选择分表字段不是很合适就会导致一些表的数据比较多,而一些表的数据比较少,应当避免这种现象。

3 带来的问题

1.夸库的事务不可用,原本的一个事务都是在同一库的(事务是基于连接的),分库后原本事务可能需要分到了不同的库,这样夸库的事务就会不可用。
2.非分表字段来查询的需求,这种情况下直接查询的性能非常低,需要扫描全表,这种情况可以通过将数据导入到ElasticSearch(搜索引擎)来解决,通过搜索引擎来满足查询非分表字段,也可以建立一个route表这个表想到于二级索引(路由表主要存储非分表字段到分表字段映射关系)。


推荐阅读
  • 全面解析运维监控:白盒与黑盒监控及四大黄金指标
    本文深入探讨了白盒和黑盒监控的概念,以及它们在系统监控中的应用。通过详细分析基础监控和业务监控的不同采集方法,结合四个黄金指标的解读,帮助读者更好地理解和实施有效的监控策略。 ... [详细]
  • Java项目分层架构设计与实践
    本文探讨了Java项目中应用分层的最佳实践,不仅介绍了常见的三层架构(Controller、Service、DAO),还深入分析了各层的职责划分及优化建议。通过合理的分层设计,可以提高代码的可维护性、扩展性和团队协作效率。 ... [详细]
  • Spring Cloud因其强大的功能和灵活性,被誉为开发分布式系统的‘一站式’解决方案。它不仅简化了分布式系统中的常见模式实现,还被广泛应用于企业级生产环境中。本书内容详实,覆盖了从微服务基础到Spring Cloud的高级应用,适合各层次的开发者。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文详细介绍了HTML中标签的使用方法和作用。通过具体示例,解释了如何利用标签为网页中的缩写和简称提供完整解释,并探讨了其在提高可读性和搜索引擎优化方面的优势。 ... [详细]
  • 本文介绍了如何在最新版本的Visual Studio Code中配置中文语言包,使用户能够更便捷地使用中文界面。文章详细描述了安装和配置步骤,并提供了相关补充说明。 ... [详细]
  • 在哈佛大学商学院举行的Cyberposium大会上,专家们深入探讨了开源软件的崛起及其对企业市场的影响。会议指出,开源软件不仅为企业提供了新的增长机会,还促进了软件质量的提升和创新。 ... [详细]
  • 新冠肺炎疫情期间,各大银行积极利用手机银行平台,满足客户在金融与生活多方面的需求。线上服务不仅激活了防疫相关的民生场景,还推动了银行通过互联网思维进行获客、引流与经营。本文探讨了银行在找房、买菜、打卡、教育等领域的创新举措。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 如何在PHPCMS V9中实现多站点功能并配置独立域名与动态URL
    本文介绍如何在PHPCMS V9中创建和管理多个站点,包括配置独立域名、设置动态URL,并确保各子站能够正常运行。我们将详细讲解从新建站点到最终配置路由的每一步骤。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 离线环境下的Python及其第三方库安装指南
    在项目开发中,有时会遇到电脑只能连接内网或完全无法联网的情况。本文将详细介绍如何在这种环境下安装Python及其所需的第三方库,确保开发工作的顺利进行。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
author-avatar
林原伟662532
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有