当前位置: 首页 > news >正文

水平分表之基因法

假设有下面的订单表,字段为order_id, uid, award,假设订单的量很大,要进行拆表

1. 需求:查询某个订单order_id的详情

        开始的时候拆分方式,按照order_id % 2的方式,进行拆分,如下图

              

        查询某个订单的详情:直接通过order_id%2,找到对应的表,就可以查到

2. 后面又新增了一个需求:查询某个用户uid所有的订单

        分析:按照上面的order_id%2的方式分表 ==> 由于相同的用户uid=101被分到了2张表,查询造成很大的困难。

        有人说,可以使用uid进行拆表,那么想查询某个uid下面的所有订单,就可以直接去某一张表查询了。

          

        ==> 分析:该方法当然可以,但是对于需求1“查询某个订单order_id的详情”,又造成了困难,因为不知道该order_id坐落在哪张表(所以,查询某个order_id的详情,就需要遍历所有的表)

------------------有没有两种查询场景都符合的分表方式呢?------------------------

基因法

1. 把uid的尾部,截取片段作为基因

2. 在生成订单号order_id的时候,传入基因,拼接成最后的订单号,即order_id = 雪花算法id + 基因 (说明,订单号order_id的生成规则要修改,即,传入uid)

3. 采用生成的订单号order_id,进行水平分表(拆分表的规则是,基因必须坐落在相同的表中)

效果:相同uid的订单号,因为有相同的后缀,一定会落到相同的表中

1. 查询每个订单详情:直接可以查询到

2. 查询每个用户所有订单:因为在同一个表中,也方便查询

 

         

 

        

 

相关文章:

  • Gorm笔记
  • 抽空做了个“胃肠镜”,唠唠嗑
  • 现在工作是不是很难找?
  • Colmap算法pipeline
  • QCC51XX---TwsTopology_Init(goals分析)
  • 新概念英语第2册-第01课笔记
  • linux环境下基于opengl的3*3可控魔方绘制
  • C#——控件
  • Elk-Metricbeat配置对ELK的监控 (Metricbeat-part4)(待续)
  • Opengl ES之纹理贴图
  • 淘宝天猫商品全网搜索接口
  • 01背包-一维dp数组学习笔记
  • Rebex Syslog for.NET R6.6,Adds support for multicast addresses
  • day02-Java基础-注释,关键字,字面量,变量,数据类型,标识符,键盘录入,IDEA相关
  • 免密登录跳板机和linux服务器
  • ----------
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • centos安装java运行环境jdk+tomcat
  • ES6 ...操作符
  • Java 多线程编程之:notify 和 wait 用法
  • js ES6 求数组的交集,并集,还有差集
  • LintCode 31. partitionArray 数组划分
  • Python学习笔记 字符串拼接
  • react-native 安卓真机环境搭建
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • Web标准制定过程
  • 高程读书笔记 第六章 面向对象程序设计
  • 你真的知道 == 和 equals 的区别吗?
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 深度学习中的信息论知识详解
  • 世界上最简单的无等待算法(getAndIncrement)
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 算法系列——算法入门之递归分而治之思想的实现
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 最简单的无缝轮播
  • Semaphore
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • 我们雇佣了一只大猴子...
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • #单片机(TB6600驱动42步进电机)
  • $.ajax()
  • (03)光刻——半导体电路的绘制
  • (4) PIVOT 和 UPIVOT 的使用
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (一)Neo4j下载安装以及初次使用
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .stream().map与.stream().flatMap的使用
  • :如何用SQL脚本保存存储过程返回的结果集
  • [2019.2.28]BZOJ4033 [HAOI2015]树上染色
  • [Angular 基础] - 自定义指令,深入学习 directive
  • [BZOJ1008][HNOI2008]越狱
  • [C#][DevPress]事件委托的使用