Votre schéma de base de données ressemble pour moi à un schéma de base de données relationnelle "classique". Mongodb convient bien à la dénormalisation des données. Je suppose que lorsque vous affichez des itinéraires, vous chargez tous les clients, chauffeurs, camions associés.
Si vous voulez rendre votre système très rapide, vous pouvez tout intégrer dans la collecte des routes.
Je suggère donc les modifications suivantes de votre schéma :
- clients - tels quels
- camions - tels quels
- Pilotes - tels quels
-
liste de routes :
Intégrez des données sur les clients à l'intérieur des arrêts au lieu d'une référence. Embarquer également un camion. Dans ce cas, le schéma sera :
{ "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 } }] }
-
itinéraires :
Lorsque le conducteur démarre un nouvel itinéraire, copiez l'itinéraire à partir de la liste des itinéraires et intégrez en plus les informations du conducteur :
{ //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" }] }
Je suppose que vous vous demandez ce que faire si le conducteur, le client ou d'autres données dénormalisées ont changé dans la collecte principale. Oui, vous devez mettre à jour toutes les données dénormalisées dans d'autres collections. Vous aurez probablement besoin de mettre à jour des milliards de documents (cela dépend de la taille de votre système) et tout va bien. Vous pouvez le faire de manière asynchrone si cela prend beaucoup de temps.
Quels sont les avantages de la structure de données ci-dessus ?
- Chaque document contient toutes les données que vous pourriez avoir besoin d'afficher dans votre application. Ainsi, par exemple, vous n'avez pas besoin de charger des clients, des chauffeurs ou des camions lorsque vous avez besoin d'afficher des itinéraires.
- Vous pouvez effectuer toutes les requêtes difficiles dans votre base de données. Par exemple, dans votre schéma, vous pouvez créer une requête qui renverra tous les itinéraires contenant des arrêts dans l'arrêt du client avec le nom ="Bill" (vous devez d'abord charger le client par son nom, obtenir son identifiant et rechercher par son identifiant dans votre schéma actuel).
Vous vous demandez probablement que vos données peuvent être désynchronisées dans certains cas, mais pour résoudre ce problème, il vous suffit de créer quelques tests unitaires pour vous assurer que vous mettez correctement à jour vos données dénormalisées.
L'espoir ci-dessus vous aidera à voir le monde d'un point de vue non relationnel, du point de vue de la base de données de documents.