Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

一个Nosql的故事

1,001 views

Published on

在 thinkinlamp tdcon 2012

  • Be the first to comment

一个Nosql的故事

  1. 1. ⼀一个 NoSQL的故事 @ 唐福林 @ 微博平台架构
  2. 2. 插播广告•  新浪微博 –  3.68亿用户(2012Q2财报数字) –  1亿消息/天,峰值>3w/s (2012春节)•  技术部-平台研发 –  tech.weibo.com –  open.weibo.com•  招聘进行中,欢迎投递简历 –  @微博平台架构 –  @唐福林 2
  3. 3. 需求 计数器 Counter 3
  4. 4. 需求 计数器 Counter 4
  5. 5. 需求•  持久计数 –  用户的计数 •  微博数,关注数,粉丝数 etc –  微博的计数 •  转发数,评论数,收藏数 etc•  周期计数 –  微博的每日曝光数 –  链接的每日点击数•  临时计数 –  未读数 –  提醒数 5
  6. 6. 需求•  持久计数 –  用户的计数 uid •  微博数 status,关注数,粉丝数 etc –  微博的计数 mid •  转发数 repost,评论数 comment,收藏数 etc•  周期计数 –  微博的每日曝光数 –  链接的每日点击数•  临时计数 –  未读数 –  提醒数 6
  7. 7. 阶段划分 •  春秋战国 •  唐宋明清 •  民国共和 7
  8. 8. 春秋战国 (1) uid   mid   content   c+me   10503   2578654   Let’s  talk   2009-­‐09-­‐15   1243233955   3587456   about  Lamp!   2009-­‐10-­‐12   •  SELECT count(uid) FROM Status WHERE uid=? 8
  9. 9. 春秋战国 (2) uid   status_count   last_+me   10503   12   2010-­‐03-­‐11   1243233955   33   2010-­‐04-­‐12   •  SELECT status_count FROM UserCount WHERE uid=? 9
  10. 10. 春秋战国 (3) uid   status_count   last_+me   10503   15   2010-­‐07-­‐18   uid   status_count   last_+me   1243233955   38   2010-­‐08-­‐22   •  SELECT status_count FROM UserCount_hash WHERE uid=? •  SELECT repost_count FROM StatusCount_YYmmdd WHERE mid=? 10
  11. 11. 春秋战国 (4) Client    MC      MYSQL   •  mc.get(uid) •  SELECT status_count FROM UserCount_hash WHERE uid=? •  mc.set(uid,count) 11
  12. 12. 春秋战国 (5) •  mc.get(uid) batch       insert   •  SELECT status_count FROM UserCount_hash WHERE uid=? •  mc.set(uid,count)  MYSQL   •  count = mc.incr(uid) •  delta = mc.incr(uid.delta) •  if (delta > 100) •  db.set(uid,count) && mc.del(uid.delta) 12
  13. 13. 春秋战国 Works ! 13
  14. 14. 唐宋明清(1)•  redis.incr(uid + “-status”)•  redis.get(uid + “-status”) 14
  15. 15. 唐宋明清(2) status:45   fans:121   aGs:66   comment:12   repost:33   •  redis.hincr(uid,“-status”) •  redis.hget(uid,“-status”) 15
  16. 16. 唐宋明清(3) •  redis.hincr(mid, “-comment”) •  redis.hget(mid, “-comment”) 16
  17. 17. 唐宋明清(4)•  rediscounter.hincr(mid,“-comment”)•  rediscounter.hget(mid,“-comment”) 17
  18. 18. 唐宋明清 Good ! 18
  19. 19. 民国共和(1) •  countservice.hincr(mid,“-comment”) •  countservice.hget(mid,“-comment”) 19
  20. 20. 民国共和 Great! 20
  21. 21. 未来 (1) •  contentservice.set(mid,content) •  contentservice.get(mid) 21
  22. 22. 未来 (2) •  listservice.set(uid+"-fans",fans_list) •  listservice.get(uid+"-fans") 22
  23. 23. 23

×