作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
有些产品有名称和价格。
用户记录他们购买的产品。
# option 1: embed logs
product = { id, name, price }
user = { id,
name,
logs : [{ product_id_1, quantity, datetime, comment },
{ product_id_2, quantity, datetime, comment },
... ,
{ product_id_n, quantity, datetime, comment }]
}
我喜欢这个。但是如果product ids是12bytes,quantity和datetime是32位(4bytes)整数,comments平均100bytes,那么一个log的大小就是12+4+4+100 = 120bytes。文档的最大大小为 4MB,因此每个用户的最大日志量为 4MB/120bytes = 33,333。如果假设用户每天记录 10 次购买,则在 33,333/10 = 3,333 天 ~ 9 年内达到 4MB 限制。好吧,9 年可能没问题,但如果我们需要存储更多数据怎么办?如果用户每天记录 100 次购买怎么办?
这里的另一个选项是什么?我是否必须将其完全标准化?
# option 2: normalized
product = { id, name, price }
log = { id, user_id, product_id, quantity, datetime, comment }
user = { id, name }
嗯。我们回到了关系。
最佳答案
如果大小是主要问题,您可以使用 mongo DbRef 继续选项 2| .
logs : [{ product_id_1, quantity, datetime, comment },
{ product_id_2, quantity, datetime, comment },
... ,
{ product_id_n, quantity, datetime, comment }]
并使用 Dbref 将此日志嵌入用户内部,类似于
var log = {product_id: "xxx", quantity:"2", comment:"something"}
db.logs.save(log)
var user= { id:"xx" name : 'Joe', logs : [ new DBRef('logs ', log._id) ] }
db.users.save(user)
关于mongodb - 你将如何在 MongoDB 中对此进行建模?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3709494/
我是一名优秀的程序员,十分优秀!