在 NoSQL (MongoDB) 中存储/同步 Facebook 图表

问题描述 投票:0回答:4

我正在构建一个需要能够扩展 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这非常有帮助......但我仍然不确定我应该做什么。

非常感谢。

mongodb facebook facebook-graph-api nosql
4个回答
4
投票

我有一个类似的应用程序,我将朋友存储为其他用户。但请确保您有一个标志来指示该用户是否是应用程序用户,否则数据在某些时候会变得混乱。

对于用户:

{
  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上放置唯一索引


3
投票

这是一个“嵌入与引用”的问题。

这是一个很好的回复SO

这里是关于模式设计的官方文档。它们是开始研究这些问题的好地方。


1
投票

要存储像您这样的图表,您应该使用 GraphDB,而不是 DocumentDB。尝试OrientDB:它是一个文档图 nosql,具有两个世界的所有最佳功能。对于您的用例来说,最重要的功能是能够在几毫秒内遍历数千个关系!开源和 Apache 2 许可。


0
投票

http://www.mongodb.org/display/DOCS/Trees+in+MongoDB

此外:如果你想存储图形,那么使用 GraphDB - MongoDB 不太可能是一般存储图形的正确选择......对于每个任务都是正确的工具。

© www.soinside.com 2019 - 2024. All rights reserved.