Scale

QPS

Single point failure(一台服务器挂)

sharding 数据拆分

  1. 解决 single point failure
  2. 分摊流量

replica 数据复制

  1. 数据恢复
  2. 分摊流量

数据库拆分

竖向拆分



缺点: 当表单特别大,column无法拆分时无法用

横向拆分

新数据放新机器,老数据放老机器的问题是什么?
根据数据的新旧程度来拆分的话,新数据的访问次数比旧数据的访问次数是要明显多的,会导致数据访问不均匀的问题。
这种方法并不会导致存储不均匀,最多只有最新的一台机器的数据相对少一些,其他的机器都还是均匀的。也不会导致不知道数据去哪台机器取,比如根据 id 来拆分,0~99在1号机器,1-199 在2号机器的话,根据 id 可以算出对应的机器是哪个



75%的数据迁移

一致性哈希算法


匀走相邻两台机器的一部分数据

缺陷:


改进:



红黑树(balanced tree)

数据复制 Replica

Replica vs Backup

SQL

NoSQL

实战1:User Table Sharding

怎么取数据就怎么拆数据库
按照 username找用户 查username->id表

实战2:Friendship Table Sharding

双向好友关系,必须存两条关系

实战4: News Feed/Timeline Sharding

owner id/userid

实战5: LintCode Submission (user/problem/status)

I am a real pikachu!