当前位置:网站首页>MySQL 用id分库使用name查询
MySQL 用id分库使用name查询
2022-08-02 21:43:00 【抓手】
对用户表最常见的分库方式是水平切分方式并按照id取模分库。查询时可以对id取模后能够直接定位db。对于name无法定位到库,查询时往往需要遍历所有库,当分库数量多起来,性能会显著降低。
下面介绍几种优化思路:
索引表法
建立一个索引表记录name到id的映射关系,通过name查询时,先用索引表查询到id,再定位相应的库。
缓存映射法
将name:id的映射关系放在缓存里性能更佳,先通过缓存获取id,然后再定位相应的库。
name生成id
设计f(name)函数生成唯一id,在插入数据时,先使用name生产id再插入,查询时通过f(name)得到id再查询id。
基因法 name基因融入id
假设分8库,采用id%8路由,潜台词是,id的最后3个bit决定这条数据落在哪个库上,这3个bit就是所谓的“基因”。
设计f(name)函数生成3bit基因,同时生成61bit的全局唯一id作为用户的标识,然后将3bit拼接到61bit后面形成64bit的主键id。
使用name查询时,先通过f(name)函数计算出3bit,再取模3bit%8,就可以定位到所属库。
边栏推荐
- 字节内部技术图谱 惊艳级实用
- What is the core business model of the "advertising e-commerce" that has recently become popular in the circle of friends, and is the advertising revenue really reliable?
- Tanabata is here - the romance of programmers
- golang刷leetcode:巫师的总力量和
- 第十章 时序与延迟
- Web APIs BOM- 操作浏览器-Window对象
- 【TypeScript】深入学习TypeScript类(上)
- 30天啃透这份Framework 源码手册直接面进大厂
- Word operation: adjust the English font individually
- 软件测试笔试题1(附答案)
猜你喜欢

搭建Spark开发环境(第二弹)

面试官居然问我:删库后,除了跑路还能干什么?

Web APIs BOM- 操作浏览器-Window对象

【使用pyside2遇到的问题】This application failed to start because no Qt platform plugin could be initialized.

若依集成minio实现分布式文件存储

【Unity】Unity开发进阶(六)UnityEvent使用与源码解析

Sentinel vs Hystrix 限流对比,到底怎么选?

同样月薪6K,为什么同事跳槽月薪翻倍,而你只涨了1000?

单例模式你会几种写法?

Task 4 Machine Learning Library Scikit-learn
随机推荐
The interviewer asked me: delete library, in addition to run do?
若依集成minio实现分布式文件存储
【TypeScript】深入学习TypeScript类(下)
双轴晶体中锥形折射的建模与应用
Go语言如何操作文件
Broadcast platform, the use of the node generated captcha image, and validate
# 医院管理系统完整项目代码以及数据库建表语句分享
第十章 时序与延迟
刚安装完win10专业工作站版,系统变量中Path默认值有哪些?重新建一个“PATH”变量名,会覆盖掉原先的“Path”。
【TypeScript】深入学习TypeScript类(上)
TDengine 在中天钢铁 GPS、 AIS 调度中的落地
嗨!不来看一下如何骚气十足的登陆MySQL嘛?
UDP(用户数据报协议)
[c] Detailed explanation of operators (1)
手把手教你干掉if else
golang刷leetcode:最大波动的子字符串
Jmeter二次开发实现rsa加密
ML之PDP:基于titanic泰坦尼克是否获救二分类预测数据集利用PDP部分依赖图对RF随机森林和LightGBM模型实现可解释性案例
hi!Don't look at how to SAO gas dye-in-the-wood in MySQL?
【STM32学习3】DMA基础操作