`

分库分表的排序

阅读更多

分库分表的排序

1. 对于单库,冗余一个汇总所有数据表,用于全部数据的排序,但是当数据量大,汇总表将会成为瓶颈。这不是一个很好的方案
2. 无论单库还是多个分库,都由程序读取需要数据并作排序。


   排序的几种方式:
    大都是按时间排序的,如果在客户端可以直接判断在哪个分表最好,可以直接读取指定分表并作排序


    例如:
    汇总表td_test_all;而分表是按companyid分表的

 


    原始sql:
    SELECT * FROM td_test_all
           WHERE  companyid =  15997 
           order by productid desc limit 0,20
      
   程序端完全可以通过companyid判断在哪个分表读取数据,改为
   
   SELECT * FROM td_test7
           WHERE  companyid =  15997 
           order by productid desc limit 0,20
      
      这样数据的排序还是通过数据实现的。
   
   如果where条件里没有分区字段的话,如何定位到具体分区呢?可以在设计阶段,在常用字段上埋下分区规则的种子, 比如在td_test7.groupid字段设计由int+7(7表示在分表td_test7里)
   
     如果数据必须从多个分表取数据的话:
  
  对于取top N条记录的话场景
  
  程序分表读取每个分表的前N条记录(理想的认为数据都来源一个分表,从而减小结果集),如分区td_test0所示:
   SELECT *
      FROM td_test0
      WHERE createtime> STR_TO_DATE('2013-04-28 15:34:02','%Y-%m-%d %H:%i:%s')
      ORDER BY createtime DESC
      LIMIT 0,5
   
   然后程序读取这些结果集,在应用端汇总排序取top N记录
   
   对于需要分页的话场景
   
   这个就只能把每个分表、满足条件的的所有记录都load到应用端,然后在程序端很容易做汇总,排序分页操作

分享到:
评论

相关推荐

    CDR分库分表的机制

    ### CDR分库分表机制详解 #### 一、引言 随着通信行业业务量的不断增长,单一数据库已经难以满足大规模数据处理的需求。CDR(Calling Detail Record,呼叫详细记录)作为通信业务中的一项重要数据,其处理能力直接...

    Mysql优化、MyCat搭建、分库分表、读写分离、负载均衡

    MySQL优化是数据库管理中的关键环节,它涉及到性能提升、资源有效利用和系统...以上就是关于"Mysql优化、MyCat搭建、分库分表、读写分离、负载均衡"的相关知识点,这些内容对于管理和优化大型MySQL数据库系统至关重要。

    springboot jpa分库分表项目实现过程详解

    Spring Boot JPA 分库分表项目实践详解 Spring Boot JPA 分库分表是当前互联网常见的两个场景,即大数据量和高并发的解决方案。分库分表可以减少数据库的负担,缩短查询时间。通常分为垂直拆分和水平拆分两种。垂直...

    mysql分库分表-mysql-sharding-jdbc.zip

    MySQL 分库分表是一种数据库扩展策略,用于解决大数据量下的性能瓶颈问题。在单个数据库无法满足高并发、大数据处理需求时,通过将数据分散到多个数据库实例中,实现水平扩展,提高系统的处理能力和可用性。`mysql-...

    SpringBoot 2.0 整合sharding-jdbc中间件实现数据分库分表

    SpringBoot 2.0 整合sharding-jdbc中间件实现数据分库分表 SpringBoot 2.0 整合sharding-jdbc中间件实现数据分库分表是指在 Spring Boot 2.0 框架下使用 sharding-jdbc 中间件来实现数据分库分表的技术方案。在这个...

    藏经阁-PostgresChina2018_余鹏_gogudb—基于FDW实现的PG分库分表插件.pdf

    本文主要介绍的是2018年PostgreSQL中国技术大会上,余鹏关于gogudb的演讲,这是一个基于FDW(Foreign Data Wrapper)实现的 PostgreSQL 分库分表插件。以下是对相关知识点的详细说明: 1. **FDW(Foreign Data ...

    当当开源sharding-jdbc-轻量级数据库分库分表中间件

    ### 当当开源Sharding-JDBC:轻量级数据库分库分表中间件 #### 概述 当当网近期开源了一款名为Sharding-JDBC的轻量级数据库分库分表中间件。作为一款高性能、易用性高的数据库水平分片框架,Sharding-JDBC在设计上...

    50_一个关键的问题!分库分表之后全局id咋生成?.zip

    在IT行业中,数据库扩展是常见的需求,特别是在高并发、大数据量的应用场景下,分库分表成为提升系统性能的有效手段。然而,随着数据的分散,一个新的挑战也随之而来:如何在分库分表后生成全局唯一ID(Global ...

    程序员面试刷题的书哪个好-mysqlsplit:mysql分库分表,分布式事务

    分库分表 基本分库分表: 1:分库分表 2:分库表冗余 3:分区表 分布式事务 1:XA分布式事务 2:TCC分布式事务 3:消息分布式事务 Mycat分片规则 Mycat读写分离 Mycat故障切换 Mycat+Percona+Haproxy+keepalived Zookeeper...

    springboot整合shard-jdbc,实现数据分库分表

    1、水平分库 以字段为依据,按照一定策略,将一个库中的数据拆分到多个库中。 每个库的结构都一样;数据都不一样;所有库的并集是全量数据; 2、水平分表 以字段为依据,按照一定策略,将一个表中的数据拆分到多个...

    mysql优化分析+主从复制+分表分库

    4. **分布式事务**:在分库分表环境中,处理跨库跨表的事务变得复杂,需要支持分布式事务的解决方案,如2PC(两阶段提交)或Saga模式。 以上内容涵盖了MySQL优化分析的基本要点,主从复制的实践应用,以及分表分库...

    10-发号器:如何保证分库分表后ID的全局唯一性?_For_group_share1

    在分布式数据库环境中,确保分库分表后的ID全局唯一性是一项关键挑战。传统的自增ID在单库单表中能够很好地工作,但在分布式系统中,由于数据分散在多个数据库或表中,简单的自增策略无法满足全局唯一性的需求。在...

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

    分库分表的情况下,查询时一般是如何做排序的? mysql分库分表,水平拆分和垂直拆分,水平拆分后如何路由 MySQL 索引使用的注意事项 left join,right join,inner join 说说分库与分表设计 分库与分表带来的分布式...

    分库分表

    分库分表是一种数据库扩展策略,用于解决单个数据库在高并发、大数据量场景下的性能瓶颈问题。在大型系统中,随着用户数量和业务规模的增长,数据库的压力会急剧增加,这时就需要采用分库分表的方式来分散负载,提高...

    MySQL 70 道面试题及答案.docx

    本节总结了 MySQL 相关的知识点,包括索引的使用注意事项、索引的优化、死锁问题的解决、SQL 优化、分库分表的设计、InnoDB 与 MyISAM 的区别、数据库索引的原理等。 索引的使用注意事项 在使用 MySQL 索引时,...

    MySQL数据库面试宝典-非常经典的100道MySQL面试题+答案

    - 分库分表会带来事务一致性挑战,跨节点的JOIN操作,数据迁移和扩容问题,以及ID生成机制和排序分页的调整。 5. **InnoDB与MyISAM的区别**: - InnoDB支持事务处理和外键约束,提供MVCC以支持并发控制,而MyISAM...

    MySQL面试经典100题(收藏版,附答案).doc

    - 分库分表面临的问题包括事务处理、跨节点JOIN、统计计算、数据迁移、ID生成、排序分页等挑战。 6. **InnoDB与MyISAM的区别**: - InnoDB支持事务处理,MyISAM不支持。 - InnoDB支持外键,MyISAM不支持。 - ...

Global site tag (gtag.js) - Google Analytics