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

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

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

先建立一个前级表格,记录所有的登录依据,所对应的用户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中文乱码的办法

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

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

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

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

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

  6. mysql 分表 导入_如何解决MySQL分表与新数据的插入

    抱歉我忽视了用户名如今已经不是单一的登陆查询和用户识别的依据了. 现在这个时代,登录的依据如此庞杂(手机.邮箱.用户名.各种第三方认证),并且一个人往往有多个登录入口,总不可能把每个人的数据重复存储多 ...

  7. mysql如何处理图片吗_如何解决mysql插入图片后缀名问题?

    inventory是库存 里边包括pic这个字段,现在要是先从inventory把图片选择出来,并插入record的pic中,但是插入之后图片的后缀名(jpg)没有了?如何解决?? 下面这个是inve ...

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

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

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

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

最新文章

  1. Jmeter性能测试之JDBC Request连接数据库
  2. hdu 3962(AC自动机+矩阵优化dp)
  3. 项目需求分析与建议-NABCD模型
  4. 计算机应用技术 平面设计,全国信息化计算机应用技术水平教育考试试卷 平面设计师...
  5. 一个人成长最快速的方法
  6. 快速简单高效的搭建 SolrCloud 集群
  7. everything搭配什么软件_带你飞起来的好工具Everything,极速找到你所要的文件
  8. Windows下通过c++调用训练好的tf模型
  9. jQuery 配置和基本语法
  10. python画字母代码_字母大小写如何python3中用代码表示?
  11. python报告水印怎么弄_超简单Python安全批量打水印教程!
  12. Web 前端常用插件
  13. 浏览器地址栏中文乱码问题
  14. 如何在Jsp页面加载时候就能执行某个方法
  15. JAVA计算:用 100 元钱买 100 支笔,其中钢笔 3 元 / 支,圆珠笔 2 元 / 支,铅笔 0.5 元 / 支,问钢笔、圆珠笔和铅笔可以各买多少支 ?
  16. 基线校正——多项式拟合
  17. 哲学视角说Docker:资本利润最大化的产物。
  18. python爬虫之无界面模式操作/scrapy框架
  19. java 判断请求消息的是手机还是电脑
  20. UI设计文字排版四大原则

热门文章

  1. CocosCreator中使用pureMvc
  2. JavaScript的工作原理:内存管理+如何处理4个常见的内存泄漏
  3. 麒麟信安云推动河北省某检察院“智慧检务”跨越式发展
  4. 悲剧:国际品牌大部分手机打不通救命电话,只通“911”
  5. 人工智能论文术语集9
  6. 专业服务器加固系统价格,实惠的加固服务器哪家靠谱
  7. 【Web技术】772- Web 中文字体性能优化实践
  8. 禁止公司内网电脑安装QQ电脑管家和360安全卫士
  9. linux系统下安装nginx,并通过外网访问
  10. 好看的html5播放器,7 款超具个性的 HTML5 播放器