zoukankan      html  css  js  c++  java
  • 记一个小问题:分库分表后的使用姿势

    问题

    收到一个问题,说有个列表在测试和预发环境排序没有问题,在线上就有问题。

    然后定位是 sql 没有加排序。加上排序后就 OK了。

    这是为什么呢?当然是因为测试和预发环境没有做分库分表啦。

    测试环境里数据库只有一个,表也只有一份,所以列表的数据来自同一个库,同一个表。排序是按数据库的默认排序。

    线上是有分库,不同数据库里的数据,取出来后再做聚合,没有排序的话是会有乱序的。

    分库分表后的使用姿势

    1) 排序

    数据来自不同的表或库,首要的影响就是排序。按实现方案的不同,有不同的排序方式 , mycat , shardingsphere 会自动排序。

    没有使用中间件的话,就需要自己实现排序。

    2)数据查询聚合

    查询后的数据在聚合时,需要发生些变化。因此需要尽量减少多表关联的查询。多表的关联查询比较考验分表的能力。分库分表没分好的话,那么在数据聚合时的性能压力会比较大。

    我们团队的开发规范是禁止多表查询,包括子查询和 join 查询。

    3)事务

    数据分库后,事务是重点。

    分布式事务,结合本地事务使用。

    当然中间件能给你很多便利。

    4)ID 主键

    分库,分表后ID 最好用来做主键,不要用来排序。排序可以用时间或其他有标识的字段。

    ID 生成则可以使用ID 生成算法或 ID 生成服务。例如:Snowflake 是 Twitter 开源的分布式 ID 生成算法,结果是一个 long 型的 ID。

    5)读写分离

    准确来说这不是分库,而是优化。读写分离,提高效率。

  • 相关阅读:
    魔法方法中的__str__和__repr__区别
    新建分类目录后,点击显示错误页面?
    3.用while和for循环分别计算100以内奇数和偶数的和,并输出。
    2.for循环实现打印1到10
    1.while循环实现打印1到10
    021_for语句
    014_运算符_字符串连接
    020_while语句
    019_增强switch语句
    018_switch语句
  • 原文地址:https://www.cnblogs.com/ElEGenT/p/12839478.html
Copyright © 2011-2022 走看看