思考题:如下场景如何设计mongo collection
Mongo 中collection相当于MySQL的表,那么当我有下面需求时,我应该如何设计我的collection及字段(key/value结构)?
场景及需求描述:
记录用户每次登录的业务标识及ip,以及登录时间
指定qid、ip需要查询该ip是否已经存在
方案一
方案二
针对上述需求,我的collection应该如何设计?
目前有两种方案,正在纠结于哪个更好一些:
'appid':$appid,
'ipArr':{
{'ip':$ip1,'logintime':$timestamp1},
{'ip':$ip2,'logintime':$timestamp2}
}
}
第一种方案,清晰,多对多的关系。足够的明朗!相对查询条件应该足够的简单:findOne({userid:$userid,appid:$appid,ip:$ip});
第二种方案,一对多的关系,查询起来指定条件比较麻烦!findOne({userid:$userid,appid:$appid,ipArr.ip:$ip});
注明:上述说的查询语句可能不准确(刚接触Mongo)
那么到底应该选择哪种?又如何来创建合适的索引?
别急,现在增加一个新的需求:每个用户,同一业务,只记录最新的5条记录!
好吧,我现在还不确定方案如何选择,以及最后一个需求具体该如何实现。明天和同事们讨论,更新本日志Mark一下!
PS:是不是使用PHP来做条数限制会更好一些?
最终决定采用第二种方案,实现上通过PHP的client端获取用户ip数组,使用PHP来操作数组元素的增加及删除,最后再upsert至Mongo中。
使用php的查询条件可以如下(取决于你想取什么,实际实现上userid及appid即可限制条件了)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:simaopig 来源: 小小子
- 标签: collection mongo
- 发布时间:2013-04-06 22:59:21
-
[318] WordPress插件开发 -- 在插件使用 -
[151] 解决 nginx 反向代理网页首尾出现神秘字 -
[92] IOS安全–浅谈关于IOS加固的几种方法 -
[49] Linux Used内存到底哪里去了? -
[48] Hacker News 排名算法工作原理 -
[48] 二维码的生成细节和原理 -
[48] 到底什么是MVC? -
[48] 中间件和稳定性平台 -
[48] Shell的那些事儿 -
[47] 浏览器的工作原理:新式网络浏览器幕后揭秘