我目前正在尝试实现类似Tumblr的用户交互,比如reblog、关注、关注者、评论、我当前关注的人的博客帖子等。
我一直在为数据库创建合适的模式。有几种方法可以实现这种功能(定义嵌入的数据结构,如博客帖子和评论,为每个操作创建活动文档等)。但我目前还不能决定哪种方式在性能和可伸缩性方面是最好的。
例如,让我们看看我关注的人的实现。以下是示例用户文档。
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} } )发布于 2012-02-10 23:08:04
(在我看来)您似乎正在尝试使用单个数据存储(在本例中是一个面向文档的NoSQL数据库)来满足(至少)两个不同的需求。您要做的第一件事似乎是将数据存储在面向文档的存储中。我将假设您有合法的理由这样做。
您似乎要做的第二件事是在您存储的文档之间建立关系。您的示例显示了一个跟随关系。我建议将此视为与在面向文档的NoSQL数据库中存储数据不同的需求,并考虑在面向图形的NoSQL数据库(如Neo4j )中存储关系。这样,您的实体就可以仅使用文档ID存储在文档存储中,而关系可以存储在图形存储中。
我的经验是,要获得一个单一的NoSQL数据库来满足中型到大型应用程序的所有功能和非功能需求是困难的(如果不是不可能的)。例如,我正在开发的最新应用程序除了使用关系型数据库之外,还使用了MongoDB、Redis和Neo4j。我花了很多时间对技术进行试验,并最终选择了这种组合。我一直致力于使用Spring3,以及Spring Data项目,到目前为止,我的体验很棒。
发布于 2012-02-10 22:53:51
一种可行的方法称为“星型架构”。如果你搜索网络或维基百科,你会发现很多信息。
https://stackoverflow.com/questions/9225102
复制相似问题