sql >> Databáze >  >> NoSQL >> MongoDB

Dělá django s mongodb migrace minulostí?

Myslím, že je to opravdu dobrá otázka, ale odpovědi budou trochu rozptýlené na základě knih, které používáte, a vašich očekávání ohledně "migrace".

Pojďme se podívat na některé běžné migrační akce:

  • Přidat pole: Mongo to velmi usnadňuje. Stačí přidat pole a je hotovo.
  • Smazání pole: Teoreticky ve skutečnosti nejste svázáni se svým schématem, takže „smazání“ je zde relativní. Pokud odeberete "vlastnost" a pole již nenačtete, pak je vlastně jedno, zda je toto pole v datech. Pokud tedy neděláte starat se o "vyčištění" databáze, pak odstranění pole neovlivní databázi. Pokud uděláte starat o čištění DB, budete v podstatě muset spustit obří smyčku for proti DB.
  • Upravte název pole: To je také obtížný problém. Když přejmenujete pole „kde“, přejmenujete ho? Pokud chcete, aby DB odrážela nový název pole, musíte v podstatě spustit obří smyčku for na DB. Abyste byli v bezpečí, pravděpodobně budete muset „přidat“ data, poté odeslat kód a poté „zrušit nastavení“ starého pole.

Některé vrásky

Koncept názvu pole v tandemu s objektem ActiveRecord je však jen trochu zkreslený. Objekt ActiveRecord efektivně poskytuje mapování vlastností objektu na skutečná databázová pole.

V typickém RDBMS není "velikost" názvu pole skutečně relevantní. V Mongo však název pole ve skutečnosti zabírá datový prostor a to znamená velký rozdíl z hlediska výkonu.

Nyní, pokud používáte nějakou formu „datového objektu“, jako je ActiveRecord, proč byste se pokoušeli ukládat do dat úplné názvy polí? DB by pravděpodobně měla ukládat všechna pole v abecedním pořadí s mapou na straně objektu. Takže dokument by mohl mít 8 polí/vlastností a názvy DB by byly "a", "b"..."j", ale názvy objektů by byly čitelné věci jako "Název", "Cena", "Množství".

Důvod, proč to uvádím, je ten, že to přidává další vrásku do Úpravy názvu pole . Pokud implementujete mapování, pak úprava názvu pole ve skutečnosti migraci vůbec nezpůsobí.

Nějaké další vrásky

Pokud uděláte chcete implementovat migraci na odstranění, pak to budete muset udělat po nasazení. Musíte si také uvědomit, že neušetříte žádné aktuální místo na disku.

Mongo předem alokuje prostor a ve skutečnosti ho „nevrátí“, pokud neprovedete opravu DB. Pokud tedy odstraníte hromadu polí v dokumentech, budou tyto dokumenty stále zabírat stejné místo na disku. Pokud jsou dokumenty později přesunuty, můžete získat zpět místo, ale dokumenty se přesunou pouze tehdy, když rostou.

Pokud odstraníte velké pole ze spousty dokumentů, budete chtít provést opravu nebo si prohlédnout nové místní compact příkaz.



  1. Jak mohu zjistit, zda existuje více výsledků z dotazu v MongoDB?

  2. Rekurzivní vyhledávání v kolekci v MongoDB

  3. Jak provést dotaz pomocí tečky (.) přes Mongoose v Node.js a jak přidat prázdné pole

  4. Dotazování na nulovou hodnotu v MongoDB