分表后的ID怎么保证唯一性

因为我们主键默认都是自增的,那么分表之后的主键在不同表就肯定会有冲突了。有几个办法考虑:

  1. 设定步长,比如1-1024张表我们设定1024的基础步长,这样主键落到不同的表就不会冲突了。
  2. 分布式ID,自己实现一套分布式ID生成算法或者使用开源的比如雪花算法这种
  3. 分表后不使用主键作为查询依据,而是每张表单独新增一个字段作为唯一主键使用,比如订单表订单号是唯一的,不管最终落在哪张表都基于订单号作为查询依据,更新也一样。

分表后非sharding_key查询怎么处理

  1. 可以做一个mapping表,比如这时候商家要查询订单列表怎么办呢?不带user_id查询的话你总不能扫全表吧?所以我们可以做一个映射关系表,保存商家和用户的关系,查询的时候先通过商家查询到用户列表,再通过user_id去查询。
  2. 打宽表,一般而言,商户端对数据实时性要求并不是很高,比如查询订单列表,可以把订单表同步到离线(实时)数仓,或者基于其他如es提供查询服务。
  3. 数据量不是很大的话,比如后台的一些查询之类的,也可以通过多线程扫表,然后再聚合结果的方式来做。或者异步的形式也是可以的。
List<Callable<List<User>>>
taskList = Lists.newArrayList();
for (int shardingIndex = 0; shardingIndex < 1024; shardingIndex++) {taskList.add(() -> (userMapper.getProcessingAccountList(shardingIndex)));
}List<ThirdAccountInfo> list = null;
try {list = taskExecutor.executeTask(taskList);
}
catch (Exception e) {//do something
}public class TaskExecutor {public <T> List<T> executeTask(Collection<? extends Callable<T>> tasks) throws Exception {List<T> result = Lists.newArrayList();List<Future<T>> futures = ExecutorUtil.invokeAll(tasks);for (Future<T> future : futures) {result.add(future.get());}return result;}
}

MySQL分表后的ID怎么保证唯一性,非sharding_key查询怎么处理相关推荐

  1. mysql分表后怎么索引_分库分表后的索引问题

    摘要 最近遇到一个慢sql,在排查过程中发现和分库分表后的索引设置有关系,总结了下问题. 问题 在进行应用健康度盘点时,发现有个慢sql 如下 select brandgoodid from bran ...

  2. mysql 分表后如何扩展_MySQL横向扩展-分库分表解决方案总结

    从业务场景看分库分表 互联网行业中,业务场景通常写少读多的情况居多,在MySQL的使用前期,读性能大多可以通过SQL优化来解决,但随着业务的持续发展,单纯依靠SQL的查询优化会越来越难以达到业务服务要 ...

  3. MySQL分表后,如何做分页查询?

    MySQL分表方式分为垂直分表和水平分表,这两种分表形式都比较简单,简单理解垂直分表指的是:表的记录并不多,但是字段却很长,表占用空间很大,检索表的时候需要执行大量的IO,严重降低了性能.这时需要把大 ...

  4. mysql 分表后查询_Mysql分表后怎么查询效率高?

    胸弟,mysql分表要慎之又慎,没有必要的情况下千万不要贸然分库分表.真到了非拆不可的时候,一定要结合实际业务,多花点时间做方案预研.像你们这个方案,按日期一天一张表,这完全是拍脑袋想出来的啊,给自己 ...

  5. mysql 分表后排序_MySQL优化分库分表,为什么要分表,分表以后如何进行排序查询,业务如何设计?...

    昨天面试新人的时候,遇到了这么一个问题,按照自己的想法大体聊了一些,但大多是感性的,并没有完整的了解why and how. 今天查了一些相关的资料,包括<MySQL性能调优与架构设计>. ...

  6. mysql 分表后如何扩展_mysql扩展至分库分表

    MySQL互联网Oracle企业应用数据结构 . 数据库的复制能解决访问问题,并不能解决大规模的并发写入问题,要解决这个问题就要考虑mysql数据切分了 数据切分,顾名思义,就是数据分散,将一台主机上 ...

  7. mysql 分表后利用视图查询数据

    1.通常我们会遇到这样的情况:使用年限进行分表,例如2020年一个表.2021年一个表 2.这种情况查询就可以借助视图工具的帮助,我们可以新建一个视图工具, 先利用一个表,运行sql语句创建好视图,点 ...

  8. mysql分页分表_mysql分表后 如何分页 (总共160个表1500万数据)

    mysql分表后,有160个表,有1500万数据,要怎么做分页列表? 之前是想用union all合并160个表的结果集..但直接卡的数据都出不来.. 请问这里应该怎么做分页,谢谢~~~ 回复讨论(解 ...

  9. mysql 分表 id_MySQL分表自增ID解决方案

    当我们对MySQL进行分表操作后,将不能依赖MySQL的自动增量来产生唯一ID了,因为数据已经分散到多个表中. 应尽量避免使用自增ID来做为主键,为数据库分表操作带来极大的不便. 在postgreSQ ...

最新文章

  1. python解析response_python:解析requests返回的response(json格式)说明
  2. 树莓派:linux库概念及相关编程(面试重点):以及USB端口号找到不的情况
  3. 2018年度机器学习50大热门网文
  4. 双数据源配置(一个项目中链接两个数据库)
  5. 喜庆传统中国红色纹理背景,吉庆节日必备!
  6. nvm、npm、nodejs的关系
  7. php psd图层重命名,ps批量修改图层名字的脚本(附批量替换方法)
  8. .NET程序员面试指南:解释委托的基本原理
  9. 经典面试题 TCP和UDP有什么区别?
  10. 扩展欧几里得算法详解
  11. 微信服务号、订阅号和企业号的区别
  12. 【运营数据分析】运营数据分析怎么做?建立运营数据分析思维
  13. 教你轻松搞懂vue-codemirror的基本用法:主要实现代码编辑、验证提示、代码格式化
  14. 高危行业?程序员不仅秃得早,还会死的早!
  15. 【onnx】——since it‘s not constant, please try to make things (e.g., kernel size) static if possible
  16. Python+OpenCV教程3:打开摄像头
  17. Android,上传一张本地图片到服务器,Okhttp的post请求上传图片本地服务器
  18. [渝粤教育] 西南科技大学 现代数字系统设计 在线考试复习资料2021版(1)
  19. PS旋转复制方法制作
  20. delphi7解决“多步操作产生错误,请检查每一步的状态”的办法

热门文章

  1. [置顶] 多任务和多线程(2)
  2. 基于Python的人脸表情管理系统
  3. ccf认证俄罗斯方块java_CCF认证历年试题
  4. C++中 DWORD和int的区别
  5. 什么是数据库连接池?为什么使用数据库连接池?
  6. 前端 js 获取当前机子的ip
  7. MATLAB系列(3)——读取txt文件
  8. 新玺配资:上证指数再创新低 还有机会吗?
  9. 因式分解法求阶乘10000!只要140毫秒
  10. Html+Css+Javascript项目实战