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

Оптимизация на производителността на схемата MongoDB

Първото нещо, което идва на ум тук е:защо съхраняването на справка ви струва 5000 пъти повече от това, което струва съхраняването в поддокумент?

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

Първият червен флаг, който видях, е вашето двойно влагане тук:

packages : [{
    package : {type: Schema.Types.ObjectId, ref: 'Packages'},
    from : {type : Schema.Types.ObjectId, ref :'Languages'},
    to : {type : Schema.Types.ObjectId, ref :'Languages'},
    words : [{
        word: {type: String},
        progress: {type: Number,default : 0}
    }]
}]

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

Като се има предвид, че винаги трябва да работите от най-високата възможна стойност, която можете да получите тук:

Трябва също така да разгледате разходите за жилище в този документ. Операторите, от които се нуждаете, ще бъдат в паметта като $pull , $push , $addToSet и т.н., което означава, че целият ви документ ще трябва да бъде сериализиран и зареден в собствените C++ структури на MongoDB. Това ще бъде изключително трудоемка задача в зависимост от трафика към тези документи.

Имайки предвид вашия коментар:

то просто забива още един пирон в ковчега на вграждането на думите в основния потребителски документ. Имайки предвид това, което казах в предишния параграф, това няма да работи добре с разходите за използване на оператори в паметта на words масив.

Това ще работи много по-добре, ако думите са разделени, $slice също е оператор в паметта и вероятно ще претърпи намалена производителност тук.

И това е бърз аргументиран отговор. Сигурен съм, че има още какво да обясня за причината си, но това трябва да е достатъчно.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Не може да презапише модела „потребители“ след компилиран възел js

  2. най-добрият възможен дизайн на схема за база данни за анализ на журнали в mongodb

  3. Защо тази заявка за актуализиране актуализира само един запис веднъж

  4. mongo.so:> недефиниран символ:php_json_encode в Unknown на ред 0. След инсталиране mongo драйвер за php

  5. SQL LPAD()