举个例子,一个blog,支持评论。 是使用嵌套方式存储呢,还是引用方式?
使用嵌套方式查询快,但是假如我要更新一个用户的头像网址怎么办?
如果使用引用方式,查询次数可能会有很多。
请大家指导一下,谢谢~
嵌套:
{ “post”: { “id”: 0, “content”: “content”, “comments”: [ { “author”: “author1”, “avator”: “http://…/a.jpg”, “comment”: “comment1” } ] }
引用:
{ “post”: { “id”: 0, “content”: “content”, }
{ “comment”: { “post_id”: “0”, “author”: “author1”, “avator”: “http://…/a.jpg”, “comment”: “comment1” } }
这个主要还是要根据你业务来看吧。 一、嵌套方法 有点:快速、高效、简单 缺点:需要定期去更新用户信息,这个频度不好把握。 现有的线上方案,如豆瓣用户的信息修改,是一个星期还是一个月只能修改一次(不太记得了)。所有可以采取这个方案,让用户不要频度太高的更新资料。 解决方案:有个服务定期去更新同步两个文档自己的相关信息。(例如:PV在凌晨3点最低的时候)
二、引用方式 优点:两个文档的数据同步更新。 缺点:查询耗时。如果是个频繁调用的功能,缺点会被放大。
建议: 考虑当前APP的体量和用户的特征。比如可以选择折中的方式,例如采用嵌套方式,可以更新头像时,将频繁调用的数据更新,一般的数据,放到后面定时更新等等。
@vczero 非常详细,感谢!~
@snowdream 一起追node.js &前端