2011-05-19 13 views
5

我正在構建一個需要能夠擴展facebook圖形數據的應用程序。在NoSQL中存儲/同步Facebook圖表(MongoDB)

我是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 
           ) 
    
  • 問題上升到FriendLists的另一個級別,我應該如何存儲?嵌入一​​切(並在我的用戶有一噸重複)或使用參考?我應該怎麼做?

我讀:http://www.mongodb.org/display/DOCS/Trees+in+MongoDB這是相當有益的......但我仍然不能確定什麼,我應該做的。

非常感謝。

回答

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

+0

似乎有趣的你使用mongo引用或你在一個單獨的查詢中得到朋友嗎? – Olivier 2011-05-26 14:40:30

+0

我更喜歡在單獨的查詢中收到朋友 – frail 2011-05-26 17:28:26

3

這是「嵌入與參考」的問題。

這是一個good reply on SO

以下是關於schema design的官方文檔。他們是開始查看這些問題的好地方。

1

要存儲一個類似於您的圖表,您應該使用一個GraphDB,而不是DocumentDB。嘗試OrientDB:這是一個具有所有這兩個世界的最佳功能的文檔圖nosql。您的用例最重要的特徵是能夠在幾ms內遍歷數千個關係!開源和Apache 2許可。