Mais conteúdo relacionado
Semelhante a MongoDB in SNS (20)
MongoDB in SNS
- 2. 个人介绍 Iwind – 架构师 RockMongo – MongoDB管理软件http://code.google.com/p/rock-php PHP+MongoDB 将近一年的版本更新 9种国际化语言 Windows/MacOS/Unix的集成环境 7 committers and contributors 欢迎合作开发社区和游戏产品 联系方式: Gmail: iwind.liu@gmail.com QQ: 19644627
- 4. MongoDBvs RDBS RDBS 稳定和健壮 成熟的解决方案 结构分散,查询繁琐 效率低下 MongoDB 快速发展当中,不够成熟 新的编程模式 Key/value 高存储和读写效率 安装、维护、扩展容易
- 9. 特点 – 高并发 Replica Set http://www.mongodb.org/display/DOCS/Replica+Sets 读写分离、分布:slaveOkay
- 11. 特点 - 服务稳定性 Replica Set 数据冗余 故障转移 热维护 故障恢复: delayed secondary - slaveDelay
- 12. 特点 – 高扩展性 Sharding http://www.mongodb.org/display/DOCS/Sharding maxSize
- 13. 特点 – 即时 MongoDB可以支撑长连接 配合Memcache
- 17. 设计原则 – 限制 只使用MongoDB作为存储数据库 只考虑在Linux/Unix下的运行效率 只考虑Nginx下的优化 只支持某一种开发语言 Java PHP 对SNS做出限制 只考虑1000条数据 允许数据显示的延迟(<10s) 特殊问题特殊对待
- 25. 好友设计 一次性读取list $slice分页 公共的好友: Intersect($list1, $list2) 好友的好友(可能认识的好友) $diff = Diff($list1, $list2) $diff = Diff($list1, $list3) … Top(group($diff)) 方便分组
- 29. 在线状态 – 查询 状态 离线:online.state=0||updated_at<最近五分钟 离开:online.state=1 && updated_at>最近五分钟 在线:online.state=1 && updated_at>最近1分钟 列表 在线的好友: db.users.find({ “uid”: {$in: [friends], “在线”:1 } }) 在线的人的资源: is_online函数:在online中查询db.users表 db.resources.find({ $where: “is_online(this.uid)” })
- 33. 聊天会话 – 对象 会话人 – connections 会话 – conversations 消息 - messages
- 35. 聊天会话 – 查询 通过conversation_id将两人联系起来,理论上是多人的 查询user_connections取得正在会话的人 查询user_conversations查询当前会话的状态 查询user_messages查询会话的消息 每个消息两份,可以单方面删除或清空
- 37. 事件 – 查询 订阅事件 $addToSet events 发布事件 $set list.事件类型:事件数据 $set updated_at_ms 查询事件 comet长轮询 先检查updated_at_ms 再取数据
- 39. 配合工具 目的 减少查询 用更适合的工具做不同的事情 Memcached比MongoDB快2~3倍 Nginx Fastcgi cache Memcached 分布式的内存缓存 共享内存 内存缓存,比Memcached快3~4倍 MongoDB Memcached Share Memory Nginx