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

Guida alla struttura del database e alle best practice di MongoDB

Il tuo schema di database mi sembra uno schema di database relazionale "classico". Mongodb si adatta bene alla denormalizzazione dei dati. Immagino che quando visualizzi i percorsi carichi tutti i clienti correlati, l'autista, il camion.

Se vuoi rendere il tuo sistema davvero veloce puoi incorporare tutto nella raccolta dei percorsi.

Quindi suggerisco di seguire le modifiche al tuo schema:

  1. clienti - così come sono
  2. camion così come sono
  3. autisti - così come sono
  4. elenco dei percorsi:

    Incorpora i dati sui clienti all'interno delle fermate anziché di riferimento. Incorpora anche il camion. In questo caso lo schema sarà:

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

    Quando il conducente inizia un nuovo percorso, copia il percorso dall'elenco dei percorsi e incorpora inoltre le informazioni sul conducente:

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

Immagino che ti stia chiedendo cosa fare se driver, clienti o altri dati denormalizzati sono cambiati nella raccolta principale. Sì, devi aggiornare tutti i dati denormalizzati all'interno di altre raccolte. Probabilmente avrai bisogno di aggiornare miliardi di documenti (dipende dalle dimensioni del tuo sistema) e va bene. Puoi farlo in modo asincrono se ci vorrà molto tempo.

A cosa serve la struttura dei dati di cui sopra?

  1. Ogni documento contiene tutti i dati che potresti dover visualizzare nella tua applicazione. Quindi, ad esempio, non hai bisogno di clienti legati al carico, autista, camion quando hai bisogno di visualizzare i percorsi.
  2. Puoi fare qualsiasi query difficile al tuo database. Ad esempio, nel tuo schema puoi creare una query che restituirà tutti i percorsi che contengono fermate alla fermata del cliente con nome ="Fattura" (è necessario caricare prima il cliente per nome, ottenere l'ID e cercare per ID cliente nello schema corrente).

Probabilmente ti stai chiedendo che i tuoi dati possono essere non sincronizzati in alcuni casi, ma per risolvere questo problema devi solo creare alcuni unit test per assicurarti di aggiornare correttamente i tuoi dati denormolizzati.

La speranza sopra ti aiuterà a vedere il mondo da un lato non relazionale, dal punto di vista del database dei documenti.