我目前正在尝试实施类似Tumblr的用户交互,如reblog,follow,followers,commenting,我目前正在关注的人的博客文章等。 还有一个要求显示活动为每个博客文章。创建与NoSQL数据库的关系的有效方式
我坚持为数据库创建适当的架构。有几种方法可以实现这种功能(定义像博客文章和评论一样嵌入的数据结构,为每个动作创建活动文档等),但目前我无法确定哪种方式在性能和可伸缩性方面最好。
例如,让我们看看我关注的人的实施。这里是示例用户文档。
User = { id: Integer,
username: String,
following: Array of Users,
followers: Array of Users,
}
这似乎微不足道。我可以管理每个用户操作的下一个字段(关注/取消关注),但如果我当前关注的用户被删除,该怎么办?更新跟随已删除用户的所有用户记录是否有效。
另一个问题是从我关注的人中创建博客文章的视图。
Post = { id: Integer,
author: User,
body: Text,
}
那么它是有效的查询最新的帖子,如;
db.posts.find({ author: { $in : me.followers} })
感谢您的亲切回答。我实际上非常适合使用适合Node.js的MongoDB。我不想使用任何其他技术(因为我必须学习它并处理其他问题),只要它能够通过有效地使用MongoDB来实现。 – 2012-02-10 16:11:35
我当然可以看到继续尝试使用MongoDB维护文档关系的担忧,因为担心其他技术会造成更多复杂性。然而,在我看来,这将是一个不可扩展的解决方案,除非应用程序非常小,并且总是由单个开发人员维护。随着团队中开发人员的增加,每个人都必须了解更新和删除文档与文档关系的含义。从长远来看,它只会导致更多的错误和复杂性。 – manish 2012-02-12 15:43:29