MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Помощ за структурата на базата данни на MongoDB и най-добрите практики

Вашата схема на база данни изглежда за мен като "класическа" схема на релационна база данни. Mongodb е подходящ за денормализиране на данни. Предполагам, че когато показвате маршрути, зареждате всички свързани клиенти, шофьор, камион.

Ако искате да направите системата си наистина бърза, можете да вградите всичко в колекцията от маршрути.

Затова предлагам следните модификации на вашата схема:

  1. клиенти - такива, каквито са
  2. камиони - както са
  3. драйвери - такива, каквито са
  4. списък с маршрути:

    Вграждане на данни за клиенти в спирки вместо справка. Също така вградете камион. В този случай схемата ще бъде:

     {
         "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. маршрути:

    Когато драйвер стартира нов маршрут, копирайте маршрута от списъка с маршрути и в допълнение вградете информация за драйвера:

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

Предполагам, че се питате какво да направите, ако данните за водача, клиента или други денормализирани данни се променят в основната колекция. Да, трябва да актуализирате всички денормализирани данни в други колекции. Вероятно ще трябва да актуализирате милиарди документи (зависи от размера на вашата система) и това е добре. Можете да го направите асинхронно, ако ще отнеме много време.

Какви са ползите от горната структура на данните?

  1. Всеки документ съдържа всички данни, които може да се наложи да покажете в приложението си. Така, например, нямате нужда от клиенти, свързани с товара, шофьор, камион, когато имате нужда от показване на маршрути.
  2. Можете да правите всякакви трудни заявки към вашата база данни. Например във вашата схема можете да създадете заявка, която ще върне всички маршрути, които съдържат спирки в спирка на клиент с име =„Сметка“ (трябва първо да заредите клиент по име, да получите идентификатор и да търсите по идентификатор на клиент в текущата си схема).

Вероятно се питате, че вашите данни могат да бъдат несинхронизирани в някои случаи, но за да разрешите това, трябва само да изградите няколко модулни теста, за да сте сигурни, че актуализирате вашите денормолизирани данни правилно.

Надяваме се, че по-горе ще ви помогне да видите света не от релационна страна, от гледна точка на база данни с документи.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Не може да се свърже с алтернативна Mongo DB в приложението Meteor

  2. Издърпайте и добавете задаване едновременно с монго

  3. Полигони на заявка $geowithin $box mongodb не връща нищо

  4. ограничения на броя на колекциите в базите данни

  5. Трите А на сигурността на MongoDB – удостоверяване, оторизация и одит