`

分库分表的排序

阅读更多

分库分表的排序

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到应用端,然后在程序端很容易做汇总,排序分页操作

分享到:
评论

相关推荐

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

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

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

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

    ID生成器idCreator.zip

    它解决了互联网行业中,使用int自增id或者是string类型的自定义id而导致的 无法方便的分库分表或者是id排序不友好问题。提到id生成器,twitter的snowflake算法 不得不被提起,但是snowflake的算法因为使用了二进制的...

    基于Java的Sagacity SQLToy数据库查询优化设计源码

    系统设计旨在为用户提供一个高效、便捷的数据库查询优化解决方案,支持模式、独创的缓存翻译、最优化的分页、无限层级分组汇总、同比环比、行列转换、树形排序汇总、SQL自适配不同数据库、分库分表、多租户、数据加...

    Mysql面试题总结大全

    3、分库分表相关 4、隔离级别、MVCC 5、MySQL 的锁机制 6、数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 彻底理解数据库事务 7、悲观锁:...

    javabitset源码-developer-knowledge-map:后端开发人员知识图谱

    分库分表 NoSQL 列式数据库 KV 数据库 文档型数据库 全文搜索引擎 图形数据库 MongoDB ElasticSearch 其他 MariaDB PostgreSQL Oracle MSSQL Cassandra 分布式数据库(TiDB) 缓存 Memcached Redis 网络 TCP、UDP ...

    road-of-arch:Java技术系统(核心知识点)

    前言 主要包含“技术体系”总导图,detail-xmind详细...分库分表,高并发,高性能,高扩展,稳定性,数据分析等经典方案实战大杂烩。 五MySql原理 在mysql中思考 含MySql原理,索引,调优等。 六缓存中间件 无神的思考

    java8集合源码分析-pangdan:面试相关技能

    java8 集合源码分析 pangdan 算法和数据结构 数组、链表、二叉树、队列、栈的各种操作(性能,场景) 二分查找和各种变种的二分查找 ...分库分表,主从复制,读写分离。 Nosql相关(redis和memcached区别之

    MySQL优化笔记-整理版.doc

    “分表分库”(用什么策略分表分库?) “主从分离”(用什么中间件?) 并没有从细化到定量的层面去分析. 如qps提高了%N? 有没有减少文件排序?语句的扫描行数减少了多少? 没有大量的数据供测试,一般在学习环境中,只是...

    ICH.Snowflake:雪花分布式id的.net core实现方案。支持k8s等分布式场景部署

    分库分表场景处理过于麻烦。 图形用户界面 GUID,最大唯一标识符,是一种有算法生成的二进制长度为128位的数字标识符,在理想情况下,任何计算机和计算机生成都不会生成两个相同的GUID,所以可以保证唯一性。但也是...

    【白雪红叶】JAVA学习技术栈梳理思维导图.xmind

    分库分表 锁 悲观锁 乐观锁 行级锁 分布式锁 分区排队 一致性 一致性算法 paxos zab nwr raft gossip 柔性事务(TCC) 一致性原理 CAP BASE 中间件 数据库 mysql 存储引擎 索引 锁 oracle ...

    分布式数据库和Hadoop都不够好,于是我们设计了分布式SQL计算系统

    具体的说,这里的数据库水平分割的意思是只分库不分表,对于不同数量级别的表,分库的数量可以不一样,例如1亿的数据量分10个分库,10亿的分50个分库。对于使用MapReduce的思想实现计算;对于一个需求,转换成一个或...

    常用SQL事例.pptx

    普通查询(左右链接、子查询、排序、分页查询、递归查询、去重查询等) 常用函数(转换函数、字符函数、聚合函数、数字函数等) ...sql优化(执行计划、索引策略、sql优化、分库、分表、分区、同义词等)

    MySQL优化笔记

    Q: 为什么别人问你MySQL优化的知识 总是没有底气. ...“分表分库”(用什么策略分表分库?) “主从分离”(用什么中间件?) 并没有从细化到定量的层面去分析. 如qps提高了%N? 有没有减少文件排序?语句的扫描行数减少了多少?

    面试题-中国平安篇.zip

    1. redis各种应⽤场景 a. 更多的数据结构; b. 可持久化; c. 计数器; d. 发布-订阅功能;...e....f....g....h. 排序、聚合查询功能。...a....b....a....b....c....d....e....f....g....h. 分表分库分区。 4. 有没了解Docker,Docker和虚拟机有什

    新版 MySQL DBA 高级视频 基于MySQL 5.7 MySQL 8.0版本.rar

    │ │ 2_MyCat分库分表原理和常见方法.mp4 │ │ 3_MyCat管理操作.mp4 │ │ 4_Atlas配置和读写分离实现.mp4 │ │ 5_Atlas分库分表实现.mp4 │ │ 6_MHA搭建和故障切换原理剖析.mp4 │ │ │ └─MySQL DBA_课堂...

    基于SpringJDBC的轻量级ORM框架sborm.zip

    2、简单的数据库路由:如果分库结构不是太复杂(比如简单的读写分离、或者多个库集成),BaseDao可以自 动进行路由(比如读写分离,根据业务模式指定读、写库),如果非默认的路由规则,也可以通过手动设置的模式,...

    spring-boot-mybatis-interceptor:mybatis自定义主键插件,通过该插件生成分布式唯一雪花ID作为数据库表的主键

    2、分表分库会有ID冲突。 UUID: 1、太长,并且有索引碎片,索引多占用空间的问题 2、无序。 雪花算法就很适合在分布式场景下生成唯一ID,它既可以保证唯一又可以排序,该插件项目的原理是 通过拦截器拦截Mybatis的...

Global site tag (gtag.js) - Google Analytics