sql >> Databáze >  >> NoSQL >> MongoDB

Nápověda ke struktuře databáze MongoDB a doporučeným postupům

Vaše schéma databáze pro mě vypadá jako „klasické“ schéma relační databáze. Mongodb se hodí pro denormalizaci dat. Myslím, že když zobrazíte trasy, načtete všechny související zákazníky, řidiče, kamion.

Pokud chcete, aby byl váš systém opravdu rychlý, můžete vše vložit do kolekce tras.

Navrhuji tedy následující úpravy vašeho schématu:

  1. zákazníci – tak jak jsou
  2. nákladní vozy – tak jak jsou
  3. ovladače – tak jak jsou
  4. seznam tras:

    Vložte data o zákaznících do zastávek místo reference. Také vestavěný nákladní automobil. V tomto případě bude schéma:

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

    Když řidič zahajuje novou trasu, zkopíruje trasu ze seznamu tras a navíc vloží informace o řidiči:

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

Myslím, že se ptáte sami sebe, co dělat, když se v hlavní kolekci změnila data řidiče, zákazníka nebo jiná denormalizovaná data. Jo, potřebuješ aktualizovat všechna denormalizovaná data v jiných kolekcích. Pravděpodobně budete potřebovat aktualizovat miliardy dokumentů (závisí na velikosti vašeho systému) a je to v pořádku. Pokud to bude trvat dlouho, můžete to udělat asynchronně.

Co je výhodné ve výše uvedené struktuře dat?

  1. Každý dokument obsahuje všechna data, která můžete potřebovat zobrazit ve své aplikaci. Takže například nepotřebujete zákazníky související s nakládkou, řidiče, kamion, když potřebujete zobrazit trasy.
  2. Do databáze můžete zadávat jakékoli obtížné dotazy. Například ve svém schématu můžete vytvořit dotaz, který vrátí všechny trasy, které obsahují zastávky na zastávce zákazníka s názvem ="Bill" (musíte nejprve načíst zákazníka podle jména, získat id a hledat podle ID zákazníka ve vašem aktuálním schématu).

Pravděpodobně se ptáte sami sebe, že vaše data mohou být v některých případech nesynchronizovaná, ale k vyřešení tohoto problému stačí vytvořit několik testů jednotek, které zajistí, že svá denormolizovaná data aktualizujete správně.

Doufám, že výše uvedené vám pomůže vidět svět z nerelační stránky, z pohledu databáze dokumentů.




  1. Jak nastavím cluster elasticache redis jako slave?

  2. Zkontrolujte, zda pole existuje s MongoDB

  3. Jak deserializovat objekt BsonDocument zpět do třídy

  4. Indexování na několika polích v mongoDB