2014-06-05 4 views
0

ça va être un site Web sur Asychronus, chat multi-utilisateur. Je ne suis pas sûr d'intégrer tout dans une table. Document de canal et messages incorporés en tant que sous-document. Ou Normalisée, deux différents tableau, canaux et messages comme bases de données relationnelles.Dans MongoDB, devrais-je utiliser normalisé ou intégrer pour le cas suivant?

Channel: [ 
    { 
    _id: ObjectId(…), 
    title: '' 
    descr: '' 
    owner: '' 
    mods : [] 
    } 
] 

Message: [ 
    { 
    _id: ObjectId(…) 
     msgid:'' 
     from : 'UserID' 
     msg : '' 
     Channel : "Channel'sObjectID" 

    } 

contre

Channel: [ 
    { 
    _id: ObjectId(…), 
    title: '' 
    descr: '' 
    owner: '' 
    mods : ['UserID','UserID',] 

    Message: [ 
     { 
      msgid:'' 
      from : 'UserID' 
      msg : '' 

     } 

    } 
] 

Les messages sont des messages instantanés et doivent écrire beaucoup (comme beaucoup d'insertion en raison de requriement multi-utilisateurs). Donc, si je veux écrire, je dois interroger le message de la chaîne et y écrire. Cela va-t-il frapper plus de performance?

Répondre

1

Lorsque vous obtenez de plus en plus de messages par canal que le temps passe, vous devez mettre les messages individuels comme des documents distincts dans une autre collection.

La raison est que MongoDB n'aime pas les documents qui se développent au fil du temps. Pour des raisons de performances, MongoDB conserve chaque document dans une section consécutive des fichiers physiques. Lorsqu'un document augmente pour dépasser cette section, il doit être déplacé vers un autre emplacement dans le fichier. Cette réaffectation constante peut être un vrai crochet de performance. Les objets très volumineux sont également mauvais pour la mise en cache. Pour décourager davantage les objets en croissance, MongoDB impose une limite de taille artificielle de 16 Mo par document. Un canal de discussion avec une activité de conversation moyenne de 100 octets par minute dépasserait cette limite dans environ 3 mois.

+0

Oh, 16MB par document est notamment Embarqué Doc? Si le document incorporé grandit, il frappera également le document principal non? Avec l'utilisateur multi, il deviendrait facilement disponible dans quelques jours. Je pensais que les documents intégrés sont traités comme des documents séparés. Merci beaucoup! –

+0

@ V3ss0n Oui, les documents incrustées sont partie du document, ils sont intégrés dans. – Philipp

Questions connexes