Вашата схема на база данни изглежда за мен като "класическа" схема на релационна база данни. Mongodb е подходящ за денормализиране на данни. Предполагам, че когато показвате маршрути, зареждате всички свързани клиенти, шофьор, камион.
Ако искате да направите системата си наистина бърза, можете да вградите всичко в колекцията от маршрути.
Затова предлагам следните модификации на вашата схема:
- клиенти - такива, каквито са
- камиони - както са
- драйвери - такива, каквито са
-
списък с маршрути:
Вграждане на данни за клиенти в спирки вместо справка. Също така вградете камион. В този случай схемата ще бъде:
{ "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 } }] }
-
маршрути:
Когато драйвер стартира нов маршрут, копирайте маршрута от списъка с маршрути и в допълнение вградете информация за драйвера:
{ //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" }] }
Предполагам, че се питате какво да направите, ако данните за водача, клиента или други денормализирани данни се променят в основната колекция. Да, трябва да актуализирате всички денормализирани данни в други колекции. Вероятно ще трябва да актуализирате милиарди документи (зависи от размера на вашата система) и това е добре. Можете да го направите асинхронно, ако ще отнеме много време.
Какви са ползите от горната структура на данните?
- Всеки документ съдържа всички данни, които може да се наложи да покажете в приложението си. Така, например, нямате нужда от клиенти, свързани с товара, шофьор, камион, когато имате нужда от показване на маршрути.
- Можете да правите всякакви трудни заявки към вашата база данни. Например във вашата схема можете да създадете заявка, която ще върне всички маршрути, които съдържат спирки в спирка на клиент с име =„Сметка“ (трябва първо да заредите клиент по име, да получите идентификатор и да търсите по идентификатор на клиент в текущата си схема).
Вероятно се питате, че вашите данни могат да бъдат несинхронизирани в някои случаи, но за да разрешите това, трябва само да изградите няколко модулни теста, за да сте сигурни, че актуализирате вашите денормолизирани данни правилно.
Надяваме се, че по-горе ще ви помогне да видите света не от релационна страна, от гледна точка на база данни с документи.