2016-09-09 7 views
0

В настоящее время я работаю над проектом, у которого есть серьезная проблема Overembedding, потому что только в одной коллекции находятся 3 объекта (массивы) внутри этого, которые содержат практически 70% модели бизнеса (мы получили этот проект от другой команды разработчиков и были полным вызовом). Еще одна проблема заключается в том, что приложение использует в реальном времени отслеживание с использованием геолокаций и постоянно использует эту коллекцию.Решения Overembedding MongoDB со снижением производительности

Я уверен, что проблемы с перегрузкой на сервере БД и замедление в течение нескольких часов для приложения было вызвано по этой причине Overembedding.

Мы считаем, что решение является сделал новую базу данных схемы (доперли, что MongoDB является схема свободна, но тем не менее это не limitant) в том, что пытаются нормализовать эти три объекта в коллекции деревьев с низкими ссылками (эмуляции как для модели Relational), но, например, вы рекомендуете, например, создавать и создавать Datawarehouse со старой (текущей) БД, для того, чтобы делать только запросы на чтение и только переносить данные пользователя или переносить всю базу данных на новую модель (что может быть очень сложным ... или нет?) ...

Дополнительная информация: Статистика автобусов Коллекция

{ 
    "ns" : "pruebas.buses", 
    "count" : 1343, 
    "size" : 38393616, 
    "avgObjSize" : 28587, 
    "numExtents" : 7, 
    "storageSize" : 58277888, 
    "lastExtentSize" : 20643840.0, 
    "paddingFactor" : 1.0, 
    "paddingFactorNote" : "paddingFactor is unused and unmaintained in 3.0. It remains hard coded to 1.0 for compatibility only.", 
    "userFlags" : 1, 
    "capped" : false, 
    "nindexes" : 1, 
    "totalIndexSize" : 65408, 
    "indexSizes" : { 
     "_id_" : 65408 
    }, 
    "ok" : 1.0 
} 

Это пример документа из этой коллекции под названием Автобусы:

{ 
    "_id" : "BAOB-02", 
    "school" : "BAOBAB", 
    "licensePlate" : "UFS 118", 
    "color" : "BLANCO", 
    "model" : 2002, 
    "username" : "baobab02", 
    "students" : [ 
     { 
      "firstNames" : "MATTHIAS ", 
      "lastNames" : "GARCIA VELANDIA", 
      "_id" : "1002", 
      "classroom" : "", 
      "blood" : "", 
      "telephone" : null, 
      "cellphone" : null, 
      "guardians" : [ 
       { 
        "firstNames" : "GUSTAVO ", 
        "lastNames" : "GARCIA GARAVITO", 
        "_id" : ObjectId("553515248a854eba40c1d2fc") 
       }, 
       { 
        "firstNames" : "CLAUDIA ", 
        "lastNames" : "VELANDIA ", 
        "_id" : ObjectId("553515248a854eba40c1d2fb") 
       } 
      ], 
      "parents" : [ 
       { 
        "firstNames" : "GUSTAVO ", 
        "lastNames" : "GARCIA GARAVITO", 
        "telephone" : null, 
        "cellphone" : 3103247894.0, 
        "email" : "[email protected]", 
        "_id" : ObjectId("553515248a854eba40c1d2fe") 
       }, 
       { 
        "firstNames" : "CLAUDIA ", 
        "lastNames" : "VELANDIA ", 
        "telephone" : null, 
        "cellphone" : 3102487056.0, 
        "email" : "[email protected]", 
        "_id" : ObjectId("553515248a854eba40c1d2fd") 
       } 
      ], 
      "addressInfo" : { 
       "pm" : { 
        "address" : "KM 2 TABIO - CAJICA", 
        "apartment" : "", 
        "neighborhood" : "VIA TABIO", 
        "monday" : true, 
        "tuesday" : true, 
        "wednesday" : true, 
        "thursday" : true, 
        "friday" : true, 
        "saturday" : false, 
        "coords" : [ 
         4.9242399390697, 
         -74.0441983938217 
        ], 
        "stopOrder" : 1 
       }, 
       "am" : { 
        "address" : "NA", 
        "apartment" : "", 
        "neighborhood" : "", 
        "monday" : false, 
        "tuesday" : false, 
        "wednesday" : false, 
        "thursday" : false, 
        "friday" : false, 
        "saturday" : false, 
        "coords" : [] 
       } 
      }, 
      "code" : "1002" 
     }, 
     { 
      "firstNames" : "JUAN PABLO", 
      "lastNames" : "ROMERO GUZMAN", 
      "_id" : "1003", 
      "classroom" : "", 
      "blood" : "", 
      "telephone" : null, 
      "cellphone" : null, 
      "guardians" : [ 
       { 
        "firstNames" : "NELSON ANDRES", 
        "lastNames" : "ROMERO ", 
        "_id" : ObjectId("5535158b8a854eba40c1d300") 
       }, 
       { 
        "firstNames" : "ANA MARIA", 
        "lastNames" : "GUZMAN MORENO", 
        "_id" : ObjectId("5535158b8a854eba40c1d2ff") 
       } 
      ], 
      "parents" : [ 
       { 
        "firstNames" : "NELSON ANDRES", 
        "lastNames" : "ROMERO ", 
        "telephone" : null, 
        "cellphone" : 3192997309.0, 
        "email" : "[email protected]", 
        "_id" : ObjectId("5535158b8a854eba40c1d302") 
       }, 
       { 
        "firstNames" : "ANA MARIA", 
        "lastNames" : "GUZMAN MORENO", 
        "telephone" : null, 
        "cellphone" : 3143095644.0, 
        "email" : "[email protected]", 
        "_id" : ObjectId("5535158b8a854eba40c1d301") 
       } 
      ], 
      "addressInfo" : { 
       "pm" : { 
        "address" : "CRR 7 2 46", 
        "apartment" : "APT. 404 INT. 8", 
        "neighborhood" : "CAPELLANIA", 
        "monday" : true, 
        "tuesday" : true, 
        "wednesday" : true, 
        "thursday" : true, 
        "friday" : true, 
        "saturday" : false, 
        "coords" : [ 
         4.91861203215498, 
         -74.0340435504913 
        ], 
        "stopOrder" : 2 
       }, 
       "am" : { 
        "address" : "NA", 
        "apartment" : "", 
        "neighborhood" : "", 
        "monday" : false, 
        "tuesday" : false, 
        "wednesday" : false, 
        "thursday" : false, 
        "friday" : false, 
        "saturday" : false, 
        "coords" : [] 
       } 
      }, 
      "code" : "1003" 
     } 
    ], 
    "auxiliary" : { 
     "firstNames" : "LEIDY VIVIANA", 
     "lastNames" : "MORANTES BARON", 
     "telephone" : null, 
     "cellphone" : 3203178186.0, 
     "email" : "[email protected]" 
    }, 
    "driver" : { 
     "firstNames" : "VICTOR JULIO", 
     "lastNames" : "MORANTES MORANTES", 
     "telephone" : null, 
     "cellphone" : 3118955381.0 
    }, 
    "__v" : 13 
} 

Эта коллекция содержит внутри студентов + - 18 и каждый студент имеет 2 родителей, как правило. В настоящее время существует 1300 документов. Данные отслеживания геолокации в реальном времени выделяются в других коллекциях, но в проекте используется другой сервер для кеширования REDIS (я знаю, что это не очень хорошая практика для кэширования всей базы данных, но мы планируем сегментировать это кэширование только для служб отслеживания).

и статистика всех БД>

{ 
    "db" : "pruebas", 
    "collections" : 20, 
    "objects" : 5785288, 
    "avgObjSize" : 285.557788652873, 
    "dataSize" : 1652034048.0, 
    "storageSize" : 2388484096.0, 
    "numExtents" : 112, 
    "indexes" : 18, 
    "indexSize" : 176544368.0, 
    "fileSize" : 4226809856.0, 
    "nsSizeMB" : 16, 
    "extentFreeList" : { 
     "num" : 0, 
     "totalSize" : 0 
    }, 
    "dataFileVersion" : { 
     "major" : 4, 
     "minor" : 22 
    }, 
    "ok" : 1.0 
} 

PD/месяц назад, мы, вероятно, будет применяться методы оптимизации для MongoDB, как сегментирование или репликации с балансировки нагрузки и Mongos ... но независимо от того, мы понимаем, что если база данных была ошибочной, лучшая форма для решения проблемы - создать новую модель. И спасибо, если кто-то найдет время, чтобы прочитать все это странное дело .. и спасибо заранее, если вы сделаете конструктивные комментарии и рекомендации

ответ

1

В приведенном выше описании коренная причина не упоминается и выглядит на основе предположения, brodriguezs заголовок для изменения схемы

Изменено несколько советов перед изменением схемы.

  • В профилировщике MongoDB вы проверяли медленные запросы.
    • ли вы пытаетесь индексировать документы (использование входов из предыдущей стадии)
  • Какая версия MongoDB вы используете, и который является механизмом хранения.
  • Вы сделали репликацию сервера.Если да, то пожалуйста, повторно беспокойство запись часть https://docs.mongodb.com/manual/core/replica-set-write-concern/
  • вы можете проверить, можно ли MongoDB реализация в памяти поможет https://docs.mongodb.com/manual/core/inmemory/

Вы можете увидеть несколько важных советов здесь - https://docs.mongodb.com/manual/administration/analyzing-mongodb-performance/

+0

Спасибо за ваши рекомендации. Я рассмотрю ссылки. Текущая версия monggoDB 3.0.7 и механизм хранения mmapv1 и не имеют репликации, это может быть рекомендовано? потому что у нас есть еще один сервер с redis, подключенный к кешированию БД, однако для некоторых запросов слишком медленно. И я хочу проверить первый пункт об индексировании документов, однако я считаю, что это может быть менее полезно встроенной коллекции. Но я буду учитывать ваши рекомендации для новой базы данных. Благодаря..! – brodriguezs