Friendfeed的MySQL key/value存储
这是一篇2009年初的资料How FriendFeed uses MySQL to store schema-less data,相信大部分人已经看过了。如Fenng的中文介绍FriendFeed 使用 MySQL 的经验。本文从不同的角度再补充下。作者几个月前也曾经在广州技术沙龙作过一次Key value store漫谈的演讲,许多参会人员对key value方向存在强烈的使用意愿,但同时也对完全抛弃MySQL存在疑虑,本文介绍的方案也可以给这些人员一些架构参考。
需求250M entities, entities表共有2.5亿条记录,当然是分库的。
典型解决方案:RDBMS问题:由于业务需要不定期更改表结构,但是在2.5亿记录的表上增删字段、修改索引需要锁表,最长需要1小时到1天以上。
Key value方案评估Document类型数据库,如CouchDB
CouchDB问题: Performance? 广泛使用? 稳定性? 抗压性?
MySQL方案MySQL相比Document store优点:
- 不用担心丢数据或数据损坏
- Replication
- 非常熟悉它的特性及不足,知道如何解决
Python dict + N5 W# e/ |+ w; i
JSON object - B$ l. K5 b! `2 O" `0 o: D6 |- |
实际friendfeed存放的是zlib压缩的Python dict数据,当然这种绑定一种语言的做法具有争议性。 5 l4 W* s: h" |* [- \
表结构及Index设计模式feed数据基本上都存在entities表中,它的结构为