MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wo sollte ich die Zeitachse der Aktivitäten in Mongodb einfügen, eingebettet in den Benutzer oder separat?

Beide dieser Artikel sind richtig und beide sind falsch.

Einbetten oder nicht einbetten? Dies ist immer die Schlüsselfrage und es kommt auf Ihre Bedürfnisse, Abfragen und Speicherung und sogar auf Ihr Arbeitsset an.

Am Ende des Tages können wir nur Hinweise geben, die Sie nicht wirklich sagen können, was am besten ist.

In Anbetracht der Größe eines Aktivitätsfeeds würde ich ihn jedoch nicht einbetten, da er leicht über 16 MB (pro Benutzer) wachsen könnte. Für die Geschwindigkeit und Leistungsfähigkeit der Abfrage könnten Sie jedoch beispielsweise die letzten 20 Aktivitäten eines Benutzers aggregieren und dann einbetten das in die Benutzerzeile (da die letzten 20 normalerweise am häufigsten abgefragt werden).

Aber dann hängt das Einbetten eines Aggregats davon ab, dass Sharding das Abfragen riesiger horizontal skalierter Sammlungen erledigen kann, und die Verwendung der richtigen Abfragen bedeutet, dass Sie keinen wirklichen Nutzen aus der Einbettung ziehen und Ihnen möglicherweise das Leben erschweren könnten, indem Sie die Indizes, den Speicher und die Abfragen, die erforderlich sind, um dieses Unterdokument zu verwalten.

Was die Einbettung bis zum Tod betrifft. Viele Abfragen von MongoDBs verlassen sich derzeit hauptsächlich auf die Einbettung auf einer oder zwei Ebenen. Aus diesem Grund könnte es schwierig werden, beispielsweise 12 verschachtelte Tabellen zu verwalten. Zu diesem Zeitpunkt sehen Sie hier und in der Google-Gruppe Fragen zur Verwaltung solcher Tabellen ein riesiges Dokument (Antwort ist clientseitig, wenn Sie wirklich wollen).

In Anbetracht dessen würde ich ein Aggregat für den Benutzer unterbringen, was bedeutet, dass der Benutzer seine eigene oder die Aktivität anderer Benutzer einzeln mit einem Roundtrip sehen kann.

In Anbetracht dessen, dass ein Lehrer höchstwahrscheinlich Seitenergebnisse von allen Benutzern haben müsste, würde ich eine separate Aktivitätssammlung unterbringen und diese für sie abfragen. Das Paging einer Ansammlung von Unterdokumenten erfordert einige Abfragen, und in diesem Fall wäre es besser, es einfach so zu machen.

Hoffentlich sollte Ihnen das den Einstieg erleichtern.