`
uule
  • 浏览: 6348591 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

分库与分表带来的分布式困境与应对之策

 
阅读更多

分布式常见问题

 

表关联问题

在单库单表的情况下,联合查询是非常容易的。但是,随着分库与分表的演变,联合查询就遇到跨库关联和跨表关系问题。

在设计之初就应该尽量避免联合查询,可以通过程序中进行拼装,或者通过反范式化设计进行规避。

 

分页与排序问题

一般情况下,列表分页时需要按照指定字段进行排序。在单库单表的情况下,分页和排序也是非常容易的。但是,随着分库与分表的演变,也会遇到跨库排序和跨表排序问题。为了最终结果的准确性,需要在不同的分表中将数据进行排序并返回,并将不同分表返回的结果集进行汇总和再次排序,最后再返回给用户。

 

分布式事务问题

随着分库与分表的演变,一定会遇到分布式事务问题,那么如何保证数据的一致性就成为一个必须面对的问题。目前,分布式事务并没有很好的解决方案,难以满足数据强一致性,一般情况下,使存储数据尽可能达到用户一致,保证系统经过一段较短的时间的自我恢复和修正,数据最终达到一致。

 

分布式全局唯一ID

在单库单表的情况下,直接使用数据库自增特性来生成主键ID,这样确实比较简单。在分库分表的环境中,数据分布在不同的分表上,不能再借助数据库自增长特性。需要使用全局唯一 ID,例如 UUID、GUID等。关于如何选择合适的全局唯一 ID,我会在后面的章节中进行介绍。

 

总结

分库与分表主要用于应对当前互联网常见的两个场景:海量数据和高并发。然而,分库与分表是一把双刃剑,虽然很好的应对海量数据和高并发对数据库的冲击和压力,但是却提高的系统的复杂度和维护成本。

 

因此,我的建议:需要结合实际需求,不宜过度设计,在项目一开始不采用分库与分表设计,而是随着业务的增长,在无法继续优化的情况下,再考虑分库与分表提高系统的性能。

分享到:
评论

相关推荐

    基于分布式的数据库分库与分表策略研究.pdf

    随着信息技术的发展和互联网用户的剧增,数据量呈爆炸性增长,传统的单体数据库已经无法满足存储需求。...通过实验验证了分库与分表策略在实际应用中的效果,体现了分布式数据库在应对大数据存储方面的优势。

    mycat1.6.5源码,分库分表,分布式

    【标题】"mycat1.6.5源码,分库分表,分布式"涉及到的是一个开源数据库中间件——Mycat,它主要用于解决大数据量下的高性能、高可用性问题,通过分库分表策略来分散数据库负载,实现数据的分布式处理。 【描述】中...

    6.分库分表之后分布式下如何保证ID全局唯一性.mp4

    6.分库分表之后分布式下如何保证ID全局唯一性.mp4

    一个基于JFinal的国产微服务框架,基于JFinal完整的MVC+ORM支持 支持多数据源、分库分表和分布式事务

    支持多数据源、分库分表和分布式事务。支持 Dubbo RPC 的完整功能,有超过 1亿+ 用户产品正在使用。完整的单点限流和分布式限流功能。支持基于 Apollo 和 Nacos 的分布式配置中心。完整的分布式缓存、分布式session...

    Python+MySQL分表分库实战

    Python作为一种流行的编程语言,与MySQL数据库结合使用,可以方便地实现分库分表的各种操作和自动化处理。 本实战教程将通过一系列知识点的介绍,讲解如何使用Python配合MySQL来实现分库分表的实战操作。首先,我们...

    数据分库分表之二叉树分库分表

    ### 数据分库分表之二叉树分库分表 #### 一、引言与背景 随着互联网技术的快速发展及用户需求的激增,单一数据库系统已难以应对日益增长的数据处理需求。为了提高系统的可扩展性和性能,数据分库分表成为了一种...

    springmvc分库分表实际例子

    在IT行业中,数据库扩展是解决高并发、大数据量场景下的常见策略,而“分库分表”正是其中一种有效的手段。本示例“springmvc分库分表实际例子”提供了一个基于SpringMVC实现的实战项目,旨在帮助开发者了解如何在...

    MySQL分库分表技术

    总结,MySQL的分库分表技术是应对大数据量和高并发场景的重要手段,它通过合理的设计和策略,能够有效地提升系统的扩展性和性能,但同时也带来了数据一致性和运维复杂性的挑战。实践中需要根据业务特性选择合适的分...

    分库分表自动建库表小工具

    这个名为"分库分表自动建库表小工具"的程序正为此目的而设计,它能帮助开发者自动化地创建分布式数据库架构。下面将详细阐述相关知识点。 首先,分库分表是解决数据库性能瓶颈的有效手段。随着数据量的增长,单一...

    分库分表总结

    分库分表是一种有效的数据库优化策略,但同时也带来了新的挑战,如数据路由、事务处理、联合查询等问题。开发者在选择和实施分库分表方案时,需要充分评估业务需求、系统架构和现有技术栈,确保方案的可行性和扩展性...

    Spring MVC +Spring + Mybatis 构建分库分表源码

    分库分表是大型分布式系统中解决数据库单点性能瓶颈的常见策略。在本示例中,可能是利用ShardingSphere等中间件实现数据库的水平扩展。ShardingSphere提供了分片策略,可以根据自定义规则(如用户ID模数、时间戳等)...

    MySQL 分库分表的实现原理及演示案例

    在面对大规模数据和高并发访问时,单库单表往往难以满足需求,分库分表就成为了必要之选。分库分表技术可以将数据分散存储到多个数据库或表中,以此来达到减轻单个数据库服务器的压力,提高查询效率和系统性能的目的...

    Node.js 实现的 MySQL 分表分库中间件,用于海量数据的分布式集群储存管理和高并发访问。.zip

    总之,Node.js实现的MySQL分库分表中间件是应对大数据挑战的有效工具,它利用了Node.js的并发处理能力和MySQL的成熟数据库功能,为开发高并发、高性能的分布式应用提供了可能。 TribeDB-master 提供的源码可能为...

    spring动态数据源+mybatis分库分表

    ShardingSphere是一个开源的数据库生态项目,它提供了一套完整的解决方案,包括分库分表、读写分离、分布式事务等,与Spring和MyBatis集成良好,能够简化开发过程。 5. **透明化操作**:目标是使业务代码无需感知分...

    Java+Springboot+mybatis+sharding jdbc 实现分库分表

    在现代企业级应用开发中,数据量的增长往往超出单个数据库的处理能力,这时就需要采用分库分表的技术来提高系统的扩展性和性能。本项目基于Java、SpringBoot、MyBatis以及ShardingJDBC实现了一个分库分表的解决方案...

    47_来来来!咱们聊一下你们公司是怎么玩儿分库分表的?.zip

    4. **挑战与应对**:分库分表带来的挑战包括跨库事务一致性、分布式主键生成、数据迁移以及查询复杂度增加等。对于分布式事务,可以采用两阶段提交、补偿事务(TCC)或最终一致性模型来解决;分布式主键可利用雪花算法...

    sharding分库分表demo

    在分库分表的环境中,MyBatis-Plus可以帮助开发者更方便地操作分布在不同库表中的数据,通过其动态SQL特性,可以轻松应对数据分片带来的复杂查询。 在实际操作中,首先需要配置ShardingSphere的规则,包括数据源、...

    mysql面试题(涉及索引、事务、锁)

    分库与分表带来的分布式困境与应对之策(如何解决分布式下的分库分表,全局表?) 说说 SQL 优化之道 MySQL遇到的死锁问题、如何排查与解决 索引类别(B+树索引、全文索引、哈希索引)、索引的原理 什么是自适应哈希...

    mysql大数据分库和分表 php解决方案

    在这种背景下,单一数据库往往难以承受巨大的数据处理压力,因此,采用分库分表技术成为了提高数据库性能的有效手段之一。本文主要探讨MySQL大数据分库和分表的PHP解决方案,并通过具体的案例分析来加深理解。 ####...

Global site tag (gtag.js) - Google Analytics