【问题标题】:Store/Sync Facebook Graph in a NoSQL (MongoDB)在 NoSQL (MongoDB) 中存储/同步 Facebook Graph
【发布时间】:2011-08-28 20:34:51
【问题描述】:

我正在构建一个需要能够扩展 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] => fbar@gmail.com
        [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
                    )
    
  • FriendLists 问题上升到另一个层次,我应该如何存储它们?嵌入所有内容(并在我的用户中有大量重复项)或使用参考?我该怎么做?

我读到:http://www.mongodb.org/display/DOCS/Trees+in+MongoDB 这很有帮助...但我仍然不确定我应该做什么。

非常感谢。

【问题讨论】:

    标签: mongodb facebook graph nosql


    【解决方案1】:

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

    对于用户:

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

    【讨论】:

    • 看起来很有趣,您是使用 mongo 引用还是在单独的查询中结交朋友?
    • 我更喜欢在单独的查询中结交朋友
    【解决方案2】:

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

    这是good reply on SO

    这是schema design 上的官方文档。他们是开始研究这些问题的好地方。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        此外:如果您想存储图表,请使用 GraphDB - MongoDB 通常不太可能是存储图表的正确选择...对于每项任务来说都是正确的工具。

        【讨论】:

          猜你喜欢
          • 2016-02-17
          • 2013-07-04
          • 1970-01-01
          • 2018-06-10
          • 1970-01-01
          • 2015-12-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多