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

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

 
阅读更多

分布式常见问题

 

表关联问题

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

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

 

分页与排序问题

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

 

分布式事务问题

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

 

分布式全局唯一ID

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

 

总结

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

 

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

分享到:
评论

相关推荐

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

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

    21-面试宝典(进一般互联网公司必看).docx

    * 分库与分表带来的分布式困境与应对之策 * SQL 优化之道 * MySQL 遇到的死锁问题 * 存储引擎的 InnoDB 与 MyISAM * 数据库索引的原理 * 为什么要用 B­tree * 聚集索引与非聚集索引的区别 * limit 20000 加载很慢的...

    java面试要点

    在数据存储方面,需要了解MySQL索引使用的注意事项,反模式设计,以及分库与分表设计和其带来的分布式困境与应对策略。SQL优化也是面试考察的重点,同时要清楚存储引擎的InnoDB与MyISAM的区别,聚集索引与非聚集索引...

    2018面试宝典核心篇

    - **分布式困境与应对之策**:分库分表虽然能有效缓解单一数据库的压力,但也带来了一系列新的挑战,比如跨库查询复杂度增加、事务一致性难以保证等。为了解决这些问题,可以采用分布式事务管理器、中间件等方式,...

    详解:大型网站架构演变和知识体系

    同时,数据库也可能需要分库分表,实现读写分离。 3. **缓存机制**:为了减少数据库压力,引入缓存技术如Redis或Memcached,存储热点数据,提高响应速度。 4. **微服务架构**:随着业务复杂度增加,微服务架构成为...

    mycat生产使用遇到的8大问题汇总

    Mycat作为一款开源的分布式数据库中间件,被广泛应用于大数据处理和高并发场景,为企业提供了数据库分库分表、读写分离等解决方案。然而,在实际生产环境中,Mycat的使用往往会遇到一些常见问题。以下是对这些问题的...

    SDCC2016技术总结

    - **分库分表**:将数据分散存储到多个物理数据库中,减轻单个数据库的压力。 - **读写分离**:将读操作和写操作分配到不同的数据库实例上,提高系统的整体性能。 - **解决方案**: - **OceanBase**:阿里巴巴...

    Java后端技术面试汇总.docx

    - **分库分表**:解决大数据量下的性能问题,但需考虑分布式困境,如全局唯一ID、跨表查询等。 - **B+tree索引**:提高查询效率,MySQL默认的索引类型。 - **数据库优化**:包括索引优化、SQL优化、读写分离、...

Global site tag (gtag.js) - Google Analytics