如何将nosql架构设计为将用户与实际上是其他用户的“朋友”相关联?

时间:2013-02-10 03:06:44

标签: mongodb scaling relation nosql

User {
    _id: "my_user",
    name: "john smith",
    email: "blah@test.com,
    friends: [
      *More Users*
    ]
}

我是否重写了朋友的用户数据?我每次“添加一个朋友”时,我是否会再次输入数据,还是“与”另一个用户_id字段“关联”?

1 个答案:

答案 0 :(得分:0)

您的文档结构应基于您的数据访问模式,即程序访问数据的方式。在上面给出的例子中,你处理的是一对多关系,因为对于很多朋友来说,只有一个“John Smith”。 “约翰史密斯”的朋友可以成为彼此的朋友,你可以通过使用朋友的'_id'来处理,就像你已经这样做的那样放在一个数组中。这将降低修改数据时出现异常的风险。

User1 {
  _id: "my_user1",
  name: "john smith",
  email: "blah@test.com,
  friends: [
    "my_user2",
    "my_user3",
    "my_user4",
  ]
}

User2 {
  _id: "my_user1",
  name: "john smith",
  email: "blah@test.com,
  friends: [
    "my_user1",
    "my_user3",
    "my_user4",
  ]
}

另一种选择是嵌入数据但这可能导致重复和修改异常,因此应该避免,除非出于性能原因需要这样做。