博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据库水平切分
阅读量:6371 次
发布时间:2019-06-23

本文共 1072 字,大约阅读时间需要 3 分钟。

  hot3.png

#数据库水平拆分策略

当业务达到一定的规模,那么就需要对业务所使用数据库进行水平切分,用于减少单台数据库的压力。常用的切分策略有这么几种:

  1. 化区域拆分
    例如:0~100000在DB1 200000~3000000 在DB2 等等 优点:拆分简单 缺点:数据分布不均匀
  2. hash取模 例如: userid.hashcode() % table_count,table_count最好是2的倍数,方便数据库扩展 优点:数据分布均匀 缺点:不好扩展

##场景一:用户表

t_user(uid, name, pqssword)

使用场景:

  1. where name=xxx and possword=xxx 登录的sql,只有在登录的时候使用到,使用频率在1%左右
  2. where uid=XXX; 登录后的各种操作都需要,使用频率97%+ 最主要的就这两种使用场景。按照使用频率来看,只要用uid字段来进行数据库的切分就可以了。当sql语句没有uid字段时操作所有表即可。

##场景二:帖子表

t_info(infoid, uid, subject, context)

使用场景:

  1. where infoid=xxx 根据帖子ID查找帖子信息,使用频率在50%
  2. where uid=xxx 根据用户ID查找帖子信息,使用频率50% 从uid中取出固定的一部分,用于生成帖子ID。 uid取出的那一部分,用于分库分表。这样两个字段都可以用于分库分表。

##场景三:好友表

t_friend(uid, friend_id, creattime, xxx)

使用场景:

  1. where uid=xxx 根据uid查找好友信息。使用频率60%
  2. where friend_id=xxx 根据friend_id 查找用户信息,使用频率40% 因为这两个id不能像帖子表中的id那样关联,因此不能使用场景二。因此可创建反向好友表,此表中只存两个字段(friend_id, uid) 在好友表中,使用uid分库分表。反向好友表中使用friend_id查找。

##场景四:订单表

t_order(order_id, buyer_id, seller_id, addr, phone...)

使用场景:

  1. where order_id=xxx
  2. where buyer_id=xxx
  3. where seller_id=xxx 可结合场景二,解决order_id的生成,结合场景三,创建卖家买家反向表。

转载于:https://my.oschina.net/le284/blog/221077

你可能感兴趣的文章
腾讯最大规模裁撤中层干部,让贤年轻人
查看>>
如何:强化 TCP/IP 堆栈安全
查看>>
Spring3 MVC中使用Swagger生成API文档
查看>>
FastCGI PHP on Windows Server 2003
查看>>
LimeSDR Getting Started Quickly | LimeSDR上手指南
查看>>
JSP标签JSTL的使用(1)--表达式操作
查看>>
SAP顾问的人脉比技术更为重要
查看>>
FI/CO PA考试试卷
查看>>
汽车介质应用非常严苛?没关系,新技术带来的高精度传感器十分适应!
查看>>
天合光能 - 用计算捕捉“光的能量”
查看>>
使用sysbench压力测试MySQL(一)(r11笔记第3天)
查看>>
css知多少(11)——position
查看>>
【Spring】定时任务详解实例-@Scheduled
查看>>
先有的资源,能看的速度看,不能看的,抽时间看。说不定那天就真的打不开了(转)...
查看>>
哪些领域适合开发微信小程序
查看>>
谁说数据库防火墙风险大?可能你还不知道应用关联防护
查看>>
ASP.NET Core应用针对静态文件请求的处理[2]: 条件请求与区间请求
查看>>
怎样做一个企业?尤其是在这个互联网时代
查看>>
DVNA:Node.js打造的开源攻防平台
查看>>
17个案例带你3分钟搞定Linux正则表达式
查看>>