Хранить / синхронизировать график Facebook в NoSQL (MongoDB) - PullRequest
5 голосов
/ 19 мая 2011

Я создаю приложение, которое должно иметь возможность расширять графические данные 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, что весьма полезно ... Но я все еще не уверен, что мне следует делать.

Большое спасибо.

Ответы [ 4 ]

4 голосов
/ 19 мая 2011

У меня было похожее приложение, и я хранил друзей как другой пользователь. Но убедитесь, что у вас есть флаг, который указывает, является ли этот пользователь пользователем приложения или нет, или в какой-то момент данные будут хаотичными.

для пользователя:

{
  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 голосов
/ 20 мая 2011

Это вопрос «вставка против ссылки» .

Вот один хороший ответ на SO .

Вот официальныедокументы на дизайн схемы .Это хорошее место, чтобы начать смотреть на эти вопросы.

1 голос
/ 25 мая 2011

Для хранения графика, подобного вашему, вы должны использовать GraphDB , а не DocumentDB.Попробуйте OrientDB : это документ-граф nosql со всеми лучшими функциями обоих миров.Самая важная функция для вашего варианта использования - это возможность обойти тысячи отношений за несколько мс!Open Source и Apache 2 лицензированы.

0 голосов
/ 19 мая 2011

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

Кроме того: если вы хотите сохранить график, тогда используйте GraphDB - MongoDB вряд ли будет правильным выбором для хранения графиков в целом ... для каждой задачи правильный инструмент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...