我正在构建一个需要能够扩展 Facebook 图形数据的应用程序。
我是 NoSQL 存储新手,正在寻求帮助。
使用图形 API,我可以检索用户,因为我希望我的应用程序能够扩展多个社交图提供商,所以我将检索到的每个特定 Facebook 键移动到
facebook
数组子集中。
[User] => Array
(
[_id] => 4dd50c139bcb233c0c000000
[name] => Foo Bar
[first_name] => Foo
[last_name] => Bar
[username] => fbar
[location] => Array
(
[id] => 110774245616525
[name] => Paris, France
)
[gender] => male
[email] => [email protected]
[timezone] => 2
[locale] => fr_FR
[facebook] => Array
(
[id] => 12345678
[link] => http://www.facebook.com/foobar
[verified] => 1
[updated_time] => 2011-05-16T17:30:23+0000
[picture] => https://graph.facebook.com/12345678/picture
)
[created] => MongoDate Object
(
[sec] => 1305807891
[usec] => 0
)
)
然后我抓住他的朋友,我希望能够让他们与我的数据库同步。 我不知道是否应该将每个朋友注册为单独的用户并尝试使用引用,或者我是否可以添加一个
Friend
子集。
什么具有最佳性能且最容易保持同步?
[User] => Array
(
[Friend] => Array
(
[0] => Array
(
[id] => 12345678
[name] => Foo Bar
)
[1] => Array
(
[id] => 12345678
[name] => Foo Bar
)
[2] => Array
(
[id] => 12345678
[name] => Foo Bar
)
朋友列表问题上升到另一个层面,我应该如何存储它们?嵌入所有内容(并在我的用户中有大量重复项)或使用参考?我该怎么办?
我读到:http://www.mongodb.org/display/DOCS/Trees+in+MongoDB这非常有帮助......但我仍然不确定我应该做什么。
非常感谢。
我有一个类似的应用程序,我将朋友存储为其他用户。但请确保您有一个标志来指示该用户是否是应用程序用户,否则数据在某些时候会变得混乱。
对于用户:
{
fbid: xxxx,
name : "xxxxx",
......
friends : [ xxxx, xxxx, xxxx ],
is_app_user : true
}
每位朋友(非应用程序用户):
{
fbid: xxxx,
name : "xxxxx",
is_app_user : false
}
当他们也登录时,您也可以为他们制作
is_app_user : true
。
PS:不要忘记在fbid上放置唯一索引
要存储像您这样的图表,您应该使用 GraphDB,而不是 DocumentDB。尝试OrientDB:它是一个文档图 nosql,具有两个世界的所有最佳功能。对于您的用例来说,最重要的功能是能够在几毫秒内遍历数千个关系!开源和 Apache 2 许可。
http://www.mongodb.org/display/DOCS/Trees+in+MongoDB
此外:如果你想存储图形,那么使用 GraphDB - MongoDB 不太可能是一般存储图形的正确选择......对于每个任务都是正确的工具。