我正在开发一个可能拥有大量用户(假设大约 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“用户关系”集合中获得数百万个条目。当然,我会在字段上设置一个索引,但我不太确定这个解决方案是否能很好地适应应用用户询问他/她当前关注者的用例。
如果对我的建模问题有任何想法和经验,我将不胜感激。也许有人甚至有更好的解决方法。
提前致谢。
最佳答案
1. collection users:
- userid
- username
- userpass
- other user specific info user
2. collection following:
- userid
- [array of followingid]
3. collection followed:
- userid
- [array of followedid]
4. messages_relation collection:
- userid
- messageid
- time
5. messages_text:
- messageid
- text
关于android - MongoDB:如何在 MongoDB 中设计 Twitter 风格的关注者/关注关系模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14459194/