在couchdb中建立freindship关系的最佳方法

时间:2012-03-21 22:51:29

标签: nosql couchdb

我正在编写一个社交网络应用程序,其中couchdb作为后端。目前,我将用户配置文件维护为JSON文档。

我的应用程序具有友情功能,当一个用户请求其他用户并且在接受时友谊会被庄严化。除了友谊之外,还有一种称为“跟随”关系的方式关系。

我想到了创建连接文档

{ 
source_user:'',
target_user:'',
source_follows_target:'',
target_follows_source:'',
..Similarly for friendship...
}

这根本不适合我。由于两个完全相似的实体(在这种情况下是用户)之间存在关系,所以我不会对模型进行细化,应该尝试区分源和目标。

1 个答案:

答案 0 :(得分:1)

关系可以(或总是)对称的事实并不意味着必须将其建模为一个逻辑关系。我认为对这两者的可能性进行建模可能更为通用,如果您愿意,可以在您的应用程序中阻止单向友谊。

在每种情况下,对于每个用户,您可能拥有一组他们认为是他们的朋友的用户(一个 - >多个)。您可以在每个关系对象上存储它是否对称的副本(或缓存),以使其更具可伸缩性。

用户对象外观的粗略示例:

{
    "userId": 1,
    "friends": [{"userId": 2, "friendsBack": true | false}, ...]
}

对这些用户组的操作,例如交叉点(共同的朋友),因为直接从用户对象访问它们会更容易。