一个Nosql的故事

928 views

Published on

在 thinkinlamp tdcon 2012

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
928
On SlideShare
0
From Embeds
0
Number of Embeds
145
Actions
Shares
0
Downloads
35
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

一个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

×