最好的MongoDB架构的Twitter克隆?

我知道类似的问题已经被问到,但是对一个基本问题寻找一个非常基本的答案。 我是MongoDB的新手,做一个Twitter风格的应用程序(博客,追随者等),我想知道最好的模式使用。

现在我有(非常高):

Member { login: string, pass: string, posts: [ { title: string, blog: string, comments: [ { comment: string } ] } ] } 

还有更多,但是这给你的想法。 现在的问题是我正在寻找添加“追随”function,我不知道最好的路线去。

我可以给成员添加一个“以下”embedded式文档,但是我不确定使用mongoDB最聪明的方法是什么。 我的主要观点显然是主要的“饲料”页面,你可以看到所有你关注的人的post。

这不是Twitter克隆的理想模式。 主要的问题是“post”是一个不断增长的数组,这意味着mongo将不得不移动你的海量文档,因为文档填充不足。 此外,文档的硬件(16MB)大小限制使得这种模式限制最多。

理想的模式取决于你是否期待Twitter的负载。 就可维护性和易用性而言,“完美的”mongodb模式与我用于Twitter的吞吐量的模式并不相同。 例如,在前一种情况下,我会为每个post使用一个文档集合。 在高吞吐量的情况下,我会开始为小群体的post制作桶文件(比如说,每个“获得更多”的页面)。 另外在高吞吐量情况下,您必须保持跟随者的时间表在最新的单独用户时间线文档中,而在低吞吐量的情况下,您可以简单地查询它们。

这个问题与博客文章示例中广泛使用的问题相同,以及如何为博客post和评论build模。 你只需要在这里应用相同的概念。 您有以下select:

  • embedded式文档
  • 专用集合和执行多个查询

利弊得到了广泛的讨论。 embedded式文档只能有16MB的大小,并且不可能在MongoDB中返回匹配数组的个别部分…做出select。

不要再进一步,因为如上所述:同样的问题已经在有关“模式devise”的许多问题中进行了讨论。 只是谷歌“架构deviseMongoDB”或寻找相同的SO。

向成员文档添加一个“后续”数组应该可以。 它应该包含成员正在关注的人员的用户标识。 您的代码将不得不检索列表并构build一个查询,以检索这些用户的推文。 由于Mongo是不相关的,因此无法构build连接成员和Tweet集合的查询,并在单个查询中执行此操作,但是通过在数据库服务器上执行此操作,使用服务器端代码执行,您应该能够减lessnetworking开销: http : //www.mongodb.org/display/DOCS/Server-side+Code+Execution 。