2011-05-19 7 views
5

Je construis une application qui doit être capable d'étendre les données du graphe Facebook. Je suis novice en matière de stockage NoSQL et je recherche de l'aide. En utilisant l'API graphique, je peux récupérer un utilisateur, puisque je voudrais que mon application puisse étendre plusieurs fournisseurs de graphe social, je déplace chaque clef spécifique de facebook récupérée dans un sous-ensemble de tableau facebook.Enregistrer/Synchroniser le graphique Facebook dans un NoSQL (MongoDB)

[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 
      ) 
    ) 
  • Est-ce une bonne pratique?

Ensuite, je prends ses amis, et je veux être en mesure de les garder en phase avec ma base de données. Je ne sais pas si je devrais enregistrer chaque ami en tant qu'utilisateur séparé et essayer d'utiliser des références, ou si je peux simplement ajouter un sous-ensemble Friend.

  • Quelle serait la meilleure performance et la plus facile à synchroniser? Le problème monte à un autre niveau avec FriendLists, comment devrais-je les stocker ??? intégrer tout (et avoir une tonne de doublons dans mon utilisateur) ou utiliser référence? Comment devrais-je faire ça?

Je lis: http://www.mongodb.org/display/DOCS/Trees+in+MongoDB qui est tout à fait ... Mais je helpfull ne sais toujours pas ce que je dois faire.

Merci beaucoup.

Répondre

4

J'avais une application similaire et j'ai stocké des amis comme un autre utilisateur. Mais assurez-vous que vous avez un drapeau qui indique si cet utilisateur est un utilisateur de l'application ou non, ou les données seraient en quelque sorte chaotique à un moment donné.

pour l'utilisateur:

{ 
    fbid: xxxx, 
    name : "xxxxx", 
    ...... 
    friends : [ xxxx, xxxx, xxxx ], 
    is_app_user : true 
} 

pour chaque ami (qui ne sont pas utilisateur de l'application):

{ 
    fbid: xxxx, 
    name : "xxxxx", 
    is_app_user : false 
} 

et quand ils se connecter aussi vous pouvez faire is_app_user : true pour eux également.

PS: Ne pas oublier de mettre index unique sur FBID

+0

Cela vous semble intéressant d'utiliser des références mongo ou avez-vous des amis dans une requête séparée? – Olivier

+0

Je préfère recevoir des amis dans une requête séparée – frail

3

Ceci est une question de "Embed vs référence".

En voici un good reply on SO.

Voici les documents officiels sur schema design. Ils sont un bon endroit pour commencer à regarder ces questions.

1

Pour stocker un graphique comme votre, vous devez utiliser un GraphDB, pas un DocumentDB. Essayez OrientDB: c'est un document-graph nosql avec toutes les meilleures caractéristiques des deux mondes. La caractéristique la plus importante pour votre cas d'utilisation est la possibilité de parcourir des milliers de relations en quelques ms! Open Source et Apache 2 sous licence.

Questions connexes