Projekt schematu bazy danych MongoDB

Mam stronę internetową z 500 tys. Użytkowników (działającą na serwerze sql 2008). Chcę teraz uwzględnić strumienie aktywności użytkowników i ich przyjaciół. Po przetestowaniu kilku rzeczy na SQL Server okazuje się, że RDMS nie jest dobrym wyborem dla tego rodzaju funkcji. jest powolny (nawet gdy mocno znormalizowałem moje dane). Więc patrząc na inne rozwiązania NoSQL, doszedłem do wniosku, że mogę do tego użyć MongoDB. Będę śledził strukturę danych na podstawieactivitystrea.ms specyfikacje jsona dla strumienia aktywności Moje pytanie brzmi: jaki byłby najlepszy projekt schematu dla strumienia aktywności w MongoDB (przy tak wielu użytkownikach można przewidzieć, że będzie on bardzo ciężki przy pisaniu, stąd mój wybór MongoDB - ma świetną wydajność „zapisu”). Myślałem o 3 typach struktur, powiedz mi, czy to ma sens, czy powinienem użyć innych schematów schematów.

1 - Przechowuj każdą aktywność ze wszystkimi przyjaciółmi / obserwatorami w tym wzorze:

 

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

    }

2 - Drugi projekt: nazwa kolekcji - 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 - Takie podejście polegałoby na przechowywaniu elementów aktywności w jednej kolekcji, a konsumentów w innej. W działaniach możesz mieć dokument taki jak:

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

    } 

A potem dla zwolenników miałbym następujące dokumenty „powiadomień”:

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

Twoje odpowiedzi są bardzo mile widziane.

questionAnswers(2)

yourAnswerToTheQuestion