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

MongoDB-Datenbankstruktur und Best Practices-Hilfe

Ihr Datenbankschema sieht für mich wie ein "klassisches" relationales Datenbankschema aus. Mongodb eignet sich gut für die Datendenormalisierung. Ich schätze, wenn Sie Routen anzeigen, laden Sie alle zugehörigen Kunden, Fahrer, LKW.

Wenn Sie Ihr System wirklich schnell machen wollen, können Sie alles in die Routensammlung einbetten.

Daher schlage ich folgende Änderungen Ihres Schemas vor:

  1. Kunden - so wie sie sind
  2. Lkw - so wie sie sind
  3. Treiber - so wie sie sind
  4. Routenliste:

    Integrieren Sie Kundendaten in Haltestellen anstelle von Referenzen. Auch LKW einbetten. In diesem Fall lautet das Schema:

     {
         "route_name": "monday_1",
         "day": "monday",
         "truck": {
             _id = 1,
             // here will be all truck data
         },
         "stops": [{
             "customer": {
                 _id = 1,
                 //here will be all customer data
             }
         }, {
             "customer": {
                 _id = 2,
                 //here will be all customer data
             }
         }]
     }
    
  5. Routen:

    Wenn der Fahrer eine neue Route startet, kopieren Sie die Route aus der Routenliste und fügen Sie zusätzlich die Fahrerinformationen ein:

     {
         //copy all route-list data (just make new id for the current route and leave reference to routes-list. In this case you will able to sync route with route-list.)
         "_id": "1",
         route_list_id: 1,
         "start_time": "04:31 AM",
         "status": "active",
         driver: {
             //embedd all driver data here
         },
         "stops": [{
             "customer": {
                 //all customer data
             },
             "status": "complete",
             "start_time": "04:45 AM",
             "finish_time": "04:48 AM",
             "elapsed_time": "3"
         }]
     }
    

Sie fragen sich wahrscheinlich, was zu tun ist, wenn sich Fahrer-, Kunden- oder andere denormalisierte Daten in der Haupterfassung geändert haben. Ja, Sie müssen alle denormalisierten Daten in anderen Sammlungen aktualisieren. Sie müssen wahrscheinlich Milliarden von Dokumenten aktualisieren (abhängig von Ihrer Systemgröße) und es ist in Ordnung. Sie können es asynchron machen, wenn es viel Zeit in Anspruch nimmt.

Welche Vorteile hat die obige Datenstruktur?

  1. Jedes Dokument enthält alle Daten, die Sie möglicherweise in Ihrer Bewerbung anzeigen müssen. So müssen Sie beispielsweise keine Kunden, Fahrer oder LKWs laden, wenn Sie Routen anzeigen möchten.
  2. Sie können alle schwierigen Abfragen an Ihre Datenbank stellen. Beispielsweise können Sie in Ihrem Schema eine Abfrage erstellen, die alle Routen zurückgibt, die Haltestellen an der Haltestelle des Kunden mit Name ="Bill" enthalten (Sie müssen zuerst den Kunden nach Namen laden, die ID abrufen und in Ihrem aktuellen Schema nach Kunden-ID suchen).

Wahrscheinlich fragen Sie sich, dass Ihre Daten in einigen Fällen nicht synchronisiert werden können, aber um dies zu lösen, müssen Sie nur ein paar Komponententests erstellen, um sicherzustellen, dass Sie Ihre denormierten Daten korrekt aktualisieren.

Die obige Hoffnung wird Ihnen helfen, die Welt von einer nicht relationalen Seite zu sehen, aus der Sicht der Dokumentendatenbank.