抱歉我忽视了用户名如今已经不是单一的登陆查询和用户识别的依据了。

现在这个时代,登录的依据如此庞杂(手机、邮箱、用户名、各种第三方认证),并且一个人往往有多个登录入口,总不可能把每个人的数据重复存储多次……

我们首先认可这个原则没有改变:查询什么,就必须根据什么来分表。那么在这个原则之下,就只好采取二级分表的方法了。

先建立一个前级表格,记录所有的登录依据,所对应的用户ID。例如这样:

Criteria UserID

---------------------------

testuser1 1

testuser2 2

1@example.com 1

15200000001 1

**weibo_auth_data 2

对这个表进行分表的方法,仍然使用对关键词做hash的方式就不错。归根到底,无论用户名、邮箱、手机等各种登陆方法,本质无非是凭一个字符串查询用户ID,体现多对一的关系。

而真正存储用户信息的地方,就按用户的唯一标识分表就行了。

注意我没有用“用户ID”这个说法。因为在分表的情况下,还使用合表时适用的单一数字递增ID,恐怕就不是什么好主意了。有一个简单的结论:分表,自然是性能实在合不上了才要分。所以分布式的结构中,无法再包含集中式的结构。提问中所说的“单独组织一个用户ID总表”的办法,显然是行不通的。

我倾向于把用户的这个唯一标识做成一个二元组。

大的方面,用户注册时用Hash等任何算法,对用户的注册数据做个简单平摊,决定用户所在的桶编号iBucket。

小的方面,在每个单独的分表中按单一递增ID,决定用户在表内的局部编号iID。

查询用户的时候,一律用两个编号(iBucket, iID)决定一个用户。这样就既遵守了增加数据后才得到用户ID,又达到了分表的目的。

注意两点:

使用了Hash,别忘了一定要约束用户输入的最大长度,严防Hash冲撞攻击。

如果用户表真的大到了非分表不可的程度,实践中可能需要考虑采用NoSQL的数据库引擎,例如Redis。

哥们你真不嫌费劲吗?

分表的最大目的是为了高效查询,所以分表的依据,就必然和查询的关键字有直接的联系。从这个意义上看,除非你的用户用ID而不是用户名来登录,否则“按用户ID分表”本身就是一个馊的要死的主意。

我推荐的分表依据是对用户名做HASH,取HASH结果16进制串的头1位(或几位)。这样可以非常简单的把集合无限大的用户名,简单的分割成几个桶,同时各个桶之间无需维护就能达到非常好的均衡。

mysql 分表 导入_如何解决MySQL分表与新数据的插入相关推荐

  1. oracle锁表查询_专业解决 MySQL 查询速度慢与性能差

    Java识堂,一个高原创,高收藏,有干货的微信公众号,一起成长,一起进步,欢迎关注 什么影响了数据库查询速度 1.1 影响数据库查询速度的四个因素 1.2 风险分析 QPS: QueriesPerSe ...

  2. mysql 删表卡死_如何解决mysql 删表卡住的问题

    如何解决mysql 删表卡住的问题 mysql删表卡住的解决办法:首先执行"show full processlist;"语句:然后执行"kill processid;& ...

  3. mysql不同版本乱码_技术|解决MySQL中文乱码以及版本不一致问题

    这几天基于Heritrix写了一个爬虫,用到MySQL,在导入导出数据时,遇到一些乱码问题,好不容易解决了,记录一下,以备查看. 一.导出数据 先说明一下自己的环境:Mac OS X 10.8.3, ...

  4. mysql 连接中文乱码_彻底解决mysql中文乱码的办法

    MySQL会出现中文乱码的原因不外乎下列几点: 1.server本身设定问题,例如还停留在latin1 2.table的语系设定问题(包含character与collation) 3.客户端程式(例如 ...

  5. 彻底mysql中文乱码问题_彻底解决mysql中文乱码

    mysql是我们项目中非经常常使用的数据型数据库. 可是由于我们须要在数据库保存中文字符,所以经常遇到数据库乱码情况.以下就来介绍一下怎样彻底解决数据库中文乱码情况. 1.中文乱码 1.1.中文乱码 ...

  6. 安装mysql程序运行出错_如何解决mysql安装后.net程序运行出错的问题

    如何解决mysql安装后.net程序运行出错的问题 发布时间:2020-09-28 17:43:58 来源:亿速云 阅读:93 作者:小新 小编给大家分享一下如何解决mysql安装后.net程序运行出 ...

  7. 解决mysql不能修改密码_如何解决mysql修改密码后不能成功登录_数据库_mysql修改密码_课课家...

    今天给大家解决下MySQL修改密码后导致不能登录的问题,一般我们都知道mysql4.1.1版本后修改了用户密码的格式,一旦修改了密码,4.1.1以前的版本上是不能进行成功登录的,那么对于这些问题该如何 ...

  8. 解决mysql的乱码问题_完美解决mysql中文乱码的问题

    MySQL(和PHP搭配之最佳组合)中文乱码的原因 MySQL(和PHP搭配之最佳组合)会出现中文乱码的原因不外乎下列几点: MySQL(和PHP搭配之最佳组合) server本身设定问题,例如还停留 ...

  9. mysql字符乱码百度_如何解决MySQL字符集乱码问题

    变量 @a 的字符编码是由参数 CHARACTER_SET_CLIENT 决定的,假设此时编码为 A,也就是变量 @a 的编码. 2. 写入语句在发送到 MySQL 服务端之前的编码由 CHARACT ...

最新文章

  1. java stringbuffer 转数组_JAVA之旅(十七)——StringBuffer的概述,存储,删除,获取,修改,反转,将缓存区的数据存储到数组中,StringBuilder...
  2. AI 渗透应用程序开发的七种趋势及方法
  3. PAT 10-2 删除字符串中的子串
  4. 程序员面试题精选100题(38)-输出1到最大的N位数[算法]
  5. 【Python】Numpy库之符号函数sign()的介绍及用法
  6. 【David Silver强化学习公开课】-7:Policy Gradient
  7. spring mvc import resource路径问题【最简单的却也是最致命的】
  8. exo文件_您在eXo平台上的第一个Juzu Portlet
  9. 数据结构排序3-堆排序
  10. python设计模式13-责任链模式
  11. cmake字符串转数组_掌握常用的数据结构之数组和字符串
  12. 使用C#和ASP.NET Core的PayPal智能按钮的客户端/服务器实现
  13. TensorFlow 最佳学习资源大全(含课程、书籍、博客、实战项目)
  14. Photoshop 2020 新建文档窗口闪烁,点击创建按钮无效的解决办法(继续使用新版)
  15. VMware Fusion 虚拟网络配置
  16. CUDA矩阵转置(共享内存 tile)
  17. VMware 终端安装 VMware Tools 以及 开启共享文件夹
  18. 计算机初级培训教学大纲,计算机初级培训教学大纲.doc
  19. 从零开始的Android:Android应用程序开发概述
  20. sol文件解析AS2.0——小游戏上古神器2存档通过Python解析

热门文章

  1. bootstrap的表单验证 vue_vue-form(vue表单验证插件 vue2.2+) 使用指南
  2. dataframe一列转化一个字符串_r - 将data.frame列从因子转换为字符
  3. Fortinet 谢青:唯有实现网络与安全融合,才能适应当今快速发展的数字市场
  4. 计算机动画制作简单动画视频教程,如何制作一个时钟转动动画视频?电脑制作动画的软件制作时钟转动的小视频的方法...
  5. Mac m1配置OpenGL(C++)
  6. 训练之DP-寒冰王座
  7. 结合Bootstrap实现一点点奶茶加盟官网首页页面效果
  8. 最新男女朋友的经典称呼
  9. 工业用微型计算机课程,工业用微型计算机自学考试大纲.doc
  10. 华为手机的5种截屏方法,你都知道吗?