Схема базы данных MongoDB

У меня есть веб-сайт с 500 000 пользователей (работает на сервере sql 2008). Теперь я хочу включить потоки активности пользователей и их друзей. После тестирования нескольких вещей на SQL Server становится очевидным, что RDMS не является хорошим выбором для такого рода функций. это медленно (даже когда я сильно денормализовал свои данные). Поэтому, просмотрев другие решения NoSQL, я решил, что могу использовать для этого MongoDB. Я буду следовать структуре данных, основанной на activitystrea.ms спецификациях json для потока активности Итак, мой вопрос: какой будет наилучший дизайн схемы для потока активности в MongoDB (с таким количеством пользователей вы можете в значительной степени предсказать, что он будет очень тяжелым для записи, поэтому мой выбор MongoDB - у него отличная производительность «записи». Я думал о 3 типах структур, скажите, пожалуйста, имеет ли это смысл, или мне следует использовать другие шаблоны схемы

1 - Хранить каждое действие со всеми друзьями/подписчиками в этом шаблоне:

 

    {
     _id:'activ123',
     actor:{
            id:person1
            },
    verb:'follow',
    object:{
            objecttype:'person',
            id:'person2'
            },
    updatedon:Date(),
    consumers:[
            person3, person4, person5, person6, ... so on
            ]

    }

2 - Второй дизайн: Имя коллекции — activity_stream_fanout


    {
    _id:'activ_fanout_123',
    personId:person3,
    activities:[
    {
     _id:'activ123',
     actor:{
            id:person1
            },
    verb:'follow',
    object:{
            objecttype:'person',
            id:'person2'
            },
    updatedon:Date(),
    }

    ],[
    //activity feed 2
    ]

    }


3 — Этот подход будет заключаться в том, чтобы хранить элементы действий в одной коллекции, а потребители — в другой.В действиях у вас может быть такой документ, как:


    { _id: "123",
      actor: { person: "UserABC" },
      verb: "follow",
      object: { person: "someone_else" },
      updatedOn: Date(...)

    } 

следующие «уведомления»:


    { activityId: "123", consumer: "someguy", updatedOn: Date(...) }
    { activityId: "123", consumer: "otherguy", updatedOn: Date(...) }
    { activityId: "123", consumer: "thirdguy", updatedOn: Date(...) } 

Мы очень ценим ваши ответы.

12
задан Michael Simmons 6 June 2012 в 17:13
поделиться