我正在开发一个可能有很多用户(比如说大约 100 万)的 android 移动应用程序。这些用户可以关注其他用户(如 Twitter)。该应用程序通过远程 REST 后端同步用户数据。用户数据本身保存在面向文档的数据库中(在我的例子中是 MongoDB)。
目前我问自己设计用户模型的最佳方式,包括它的追随者和追随关系。首先想到的是在用户文档中嵌入关系。
示例用户文档:
{
"_id":"50fd6bb530043e3c569af288",
"name":"Marsha Garcia",
"follower"["50fd6bb530043e3c569af287","50fd6bb530043e3c569af289","50fd6bb530043e3c569af28c"],
"following":["70fd6bb530043e3c569af289","10fd6bb530043e3c569af222","89fd6bb530043e3c569af45o"]
}
积极的事情是关注/关注关系已经与用户加入。但是,假设一个用户关注了大约 100.000 个或更多其他用户。然后文档大小会变得非常大。如果我通过移动应用程序中的 REST 服务加载此用户对象,可能需要一段时间。此外,在最坏的情况下,用户文档可能会超过 MongoDb 的 16MB 文档限制。
因此我的第二个想法是以更经典的方式对关注者和关注者关系进行建模:一个包含每个用户的关注者关系的额外文档。
示例“用户关系”文档:
{
"_id": 50fe65828de290c0a8a8ea2d"
"uid": "50fd6bb530043e3c569af288",
"rel_uid": "50fe65828de290c0a8a8e9a6",
"type": "FOLLOWING"
}
积极的一面是每个用户文档的大小将保持不变。缺点是有很多用户和关注关系,我可以很容易地在我的 MongoDB“用户关系”集合中获得数百万个条目。当然,我将在字段上设置一个索引,但我不太确定这个解决方案是否能很好地适应应用程序用户询问他/她当前关注者的用例。
我将不胜感激有关我的建模问题的任何想法和经验。也许任何人甚至有更好的解决方法。
提前很多。