当前位置:网站首页>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,就可以定位到所属库。
边栏推荐
- LeetCode 2360. 图中的最长环 基环树找环+时间戳
- 测试ESP32-Zigbee转发命令 : 滑轨、继电器控制
- JS Date 时间戳 getTune data.parse 倒计时小程序
- wallys/new product/WiFi6 MiniPCIe Module 2T2R 2×2.4GHz 2x5GHz MT7915 MT7975
- In-depth study TypeScript TypeScript 】 【 class (under)
- IP协议(网际协议)
- go exec 包
- H5网页播放器EasyPlayer.js播放器界面的加载效果无法消失是什么原因?
- 多租户的多种实现方案
- 用于中文文本分类的中文停用词
猜你喜欢
“百日行动”进行时:700余交通安全隐患被揪出
抽象工厂模式
The only way to go from a monthly salary of 10k to 30k: automated testing
测试ESP32-Zigbee转发命令 : 滑轨、继电器控制
Intensive reading of the Swin Transformer paper and analysis of its model structure
SSM整合步骤(重点)
【STM32学习3】DMA基础操作
任务四 机器学习库Scikit-learn
面试官居然问我:删库后,除了跑路还能干什么?
In-depth study TypeScript TypeScript 】 【 class (under)
随机推荐
golang刷leetcode:拼接数组的最大分数
字节内部技术图谱 惊艳级实用
Do you understand the factory pattern?
不堪哥哥殴打谩骂,妹妹申请人身安全保护令获支持
以赛促练-力扣第304场周赛反思(持续更新中)
从月薪10k到30k的必走之路:自动化测试
成功解决TypeError: can‘t multiply sequence by non-int of type ‘float‘
Ansible installation and configuration
In-depth study TypeScript TypeScript 】 【 class (under)
网络运维系列:健康检查的方式
谷粒商城-day13-es和商品上架
Redis是如何轻松实现系统秒杀的?
搭建Spark开发环境(第二弹)
【DEBUG】ImportError: Unable to import required dependencies: numpy: DLL load failed: 找不到指定的模块。
【TypeScript】深入学习TypeScript类(上)
JS Date 时间戳 getTune data.parse 倒计时小程序
word操作:单独调整英文字体
The interviewer asked me: delete library, in addition to run do?
gdb调试简要总结
命令行启动常见问题及解决方案