MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Czy django z mongodb sprawia, że ​​migracje to już przeszłość?

Myślę, że to naprawdę dobre pytanie, ale odpowiedzi będą nieco rozproszone w zależności od używanych bibliotek i Twoich oczekiwań dotyczących „migracji”.

Rzućmy okiem na kilka typowych działań związanych z migracją:

  • Dodaj pole: Mongo bardzo to ułatwia. Po prostu dodaj pole i gotowe.
  • Usuń pole: Teoretycznie nie jesteś przywiązany do swojego schematu, więc „usunięcie” jest tutaj względne. Jeśli usuniesz „właściwość” i przestaniesz ładować pole, nie ma znaczenia, czy to pole znajduje się w danych. Więc jeśli nie dbasz o "oczyszczenie" bazy danych, wtedy usunięcie pola nie ma wpływu na bazę danych. Jeśli robisz zależy Ci na czyszczeniu bazy danych, będziesz zasadniczo musiał uruchomić gigantyczną pętlę for przeciwko DB.
  • Zmień nazwę pola: To też jest trudny problem. Kiedy zmieniasz nazwę pola „gdzie” zmieniasz jego nazwę? Jeśli chcesz, aby baza danych odzwierciedlała nową nazwę pola, musisz w zasadzie wykonać gigantyczną pętlę for w bazie danych. Aby być bezpiecznym, prawdopodobnie musisz „dodać” dane, następnie wcisnąć kod, a następnie „rozbroić” stare pole.

Niektóre zmarszczki

Jednak koncepcja nazwy pola w parze z obiektem ActiveRecord jest trochę wypaczona. Obiekt ActiveRecord skutecznie zapewnia odwzorowania właściwości obiektu na rzeczywiste pola bazy danych.

W typowym RDBMS "rozmiar" nazwy pola nie jest tak naprawdę istotny. Jednak w Mongo nazwa pola faktycznie zajmuje miejsce na dane, co ma duże znaczenie pod względem wydajności.

Teraz, jeśli używasz jakiejś formy "obiektu danych", takiego jak ActiveRecord, dlaczego miałbyś próbować przechowywać pełne nazwy pól w danych? Baza danych powinna prawdopodobnie przechowywać wszystkie pola w kolejności alfabetycznej z mapą po stronie obiektu. Tak więc dokument mógłby mieć 8 pól/właściwości, a nazwy bazy danych to "a", "b"..."j", ale nazwy obiektów byłyby czytelne, takie jak "Nazwa", "Cena", "Ilość".

Powodem, dla którego o tym wspominam, jest to, że dodaje to kolejną zmarszczkę do Zmodyfikowania nazwy pola . Jeśli implementujesz mapowanie, modyfikacja nazwy pola tak naprawdę wcale nie powoduje migracji.

Więcej zmarszczek

Jeśli tak chcesz zaimplementować migrację po usunięciu, musisz to zrobić po wdrożenie. Musisz także wiedzieć, że nie będziesz oszczędzać żadnego miejsca na dysku, gdy to zrobisz.

Mongo wstępnie przydziela przestrzeń i tak naprawdę jej nie „oddaje”, chyba że wykonasz naprawę bazy danych. Jeśli więc usuniesz kilka pól z dokumentów, te dokumenty nadal zajmują to samo miejsce na dysku. Jeśli dokumenty zostaną później przeniesione, możesz odzyskać miejsce, jednak dokumenty przenoszą się tylko wtedy, gdy rosną.

Jeśli usuniesz duże pole z wielu dokumentów, zechcesz dokonać naprawy lub sprawdzić nowy w miejscu compact polecenie.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $toLong

  2. Jak znaleźć dokumenty spełniające wiele kryteriów

  3. MongoDB $ne Operator potoku agregacji

  4. Jak skonfigurować ustawienia projektu Visual Studio za pomocą sterownika mongo-cxx-driver?

  5. Pobierz wszystkie możliwe kombinacje z tablicy w agregacji MongoDB 🚀