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

Django с mongodb прави ли миграциите нещо от миналото?

Мисля, че това е наистина добър въпрос, но отговорите ще бъдат малко разпръснати въз основа на библиотеките, които използвате, и очакванията ви за „миграция“.

Нека да разгледаме някои често срещани миграционни действия:

  • Добавяне на поле: Mongo прави това много лесно. Просто добавете поле и сте готови.
  • Изтриване на поле: На теория вие всъщност не сте обвързани с вашата схема, така че „изтриването“ тук е относително. Ако премахнете „свойството“ и вече не зареждате полето, тогава няма особено значение дали това поле е в данните. Така че аконе грижа за "почистване" на базата данни, тогава премахването на поле не засяга базата данни. Ако справите ако се грижите за почистването на DB, ще трябва да стартирате гигантски for цикъл срещу DB.
  • Промяна на име на поле: Това също е труден проблем. Когато преименувате поле "къде" го преименувате? Ако искате DB да отразява новото име на полето, тогава основно трябва да изпълните гигантски for цикъл в DB. ЗА да сте в безопасност, вероятно трябва да „добавите“ данни, след това да натиснете код, след което да „отмените“ старото поле.

Някои бръчки

Концепцията за име на поле в тандем с обект ActiveRecord обаче е малко изкривена. Обектът ActiveRecord ефективно осигурява преобразуване на свойствата на обекта към действителните полета на базата данни.

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

Сега, ако използвате някаква форма на „обект с данни“ като ActiveRecord, защо бихте се опитвали да съхранявате пълни имена на полета в данните? DB вероятно трябва да съхранява всички полета по азбучен ред с карта от страната на обекта. Така че един документ може да има 8 полета/свойства и имената на DB ще бъдат "a", "b"..."j", но имената на обектите ще бъдат четливи неща като "Име", "Цена", "Количество".

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

Още малко бръчки

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

Mongo предварително разпределя пространство и всъщност не го „връща“, освен ако не направите поправка на DB. Така че, ако изтриете куп полета в документи, тези документи все още заемат същото място на диска. Ако документите бъдат преместени по-късно, тогава можете да си върнете място, но документите се преместват само когато нараснат.

Ако премахнете голямо поле от много документи, ще искате да направите поправка или да проверите новото място compact команда.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB агрегиране с Java драйвер

  2. mongoose връзка connectTimeoutMS

  3. Заявка за агрегиране на MongoDB - Преименуване на полета, върнати от вградени документи

  4. Намерете използването на _id, което не работи с агрегиране

  5. Дефиниране на схема Mongoose в движение от JSON-форматирано „описание“