sql >> Database teknologi >  >> NoSQL >> MongoDB

Hjælp til MongoDB-databasestruktur og bedste praksis

Dit databaseskema ser for mig ud som 'klassisk' relationsdatabaseskema. Mongodb passer godt til datadenormalisering. Jeg tror, ​​at når du viser ruter, læsser du alle relaterede kunder, chauffør, lastbil.

Hvis du vil gøre dit system virkelig hurtigt, kan du indlejre alt i rutesamling.

Så jeg foreslår følgende ændringer af dit skema:

  1. kunder - som de er
  2. lastbiler - som de er
  3. drivere - som de er
  4. rute-liste:

    Integrer data om kunder i stoppesteder i stedet for reference. Også indbygget lastbil. I dette tilfælde vil skemaet være:

     {
         "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. ruter:

    Når chaufføren starter ny rute, kopierer ruten fra rutelisten og indlejrer desuden chaufførinformation:

     {
         //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"
         }]
     }
    

Jeg gætter på, at du spørger dig selv, hvad du skal gøre, hvis driver, kunde eller andre denormaliserede data ændres i hovedindsamlingen. Ja, du skal opdatere alle denormaliserede data i andre samlinger. Du skal sandsynligvis opdatere milliarder af dokumenter (afhænger af dit systemstørrelse), og det er okay. Du kan gøre det asynkront, hvis det tager lang tid.

Hvilke fordele har ovenstående datastruktur?

  1. Hvert dokument indeholder alle data, som du muligvis skal have vist i din applikation. Så du behøver for eksempel ikke lastrelaterede kunder, chauffør, lastbil, når du har brug for udstillingsruter.
  2. Du kan lave alle vanskelige forespørgsler til din database. For eksempel i dit skema kan du bygge forespørgsel, der vil returnere alle ruter, der indeholder stop i stop af kunde med navn ="Bill" (du skal indlæse kunde ved navn først, få id og se efter kunde-id i dit nuværende skema).

Sandsynligvis spørger du dig selv om, at dine data kan være usynkroniserede i nogle tilfælde, men for at løse dette skal du blot bygge et par enhedstest for at sikre, at du opdaterer dine denormoliserede data korrekt.

Håb ovenfor vil hjælpe dig med at se verden fra en ikke relationel side, fra dokumentdatabasesynspunkt.




  1. Mongodb sorterer dokumenter efter kompleks beregnet værdi

  2. Sende filer fra Amazon S3 gennem NodeJS-serveren uden at afsløre S3 URL?

  3. Pymongo-tilladelsesproblem for sikre indsatser

  4. RDD af BSONObject til en DataFrame