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

Czy MongoDB $set zapisuje tylko pole czy cały dokument?

TL;DR:$inc gwarantuje aktualizacje na miejscu, $set nie, ale w bardzo szczególnych okolicznościach można to również zrobić na miejscu.

Szczegóły

Są na to dwa aspekty:

  1. jak to przechodzi przez drut?

    Informacja jest wysyłana jako operacja, $set pozostaje $set więc to jest delta. Dotyczy to również oploga używanego do replikacji. W ten sposób, używając $set jest bardziej wydajny w odniesieniu do przepustowości.

  2. jak jest aktualizowany na dysku?

    MongoDB wykonuje aktualizację w miejscu wtedy i tylko wtedy, gdy klucz (pole) już istnieje , więc dodanie nowego pola do dokumentu jest większą operacją niż przypisanie innej wartości do istniejącego pola.

    Jednak nawet wtedy wartości muszą mieć ten sam rozmiar i nie może zmieniać typu i muszą być tego samego typu double, long, int or bool , w przeciwnym razie nie aktualizacja na miejscu.

Nie jestem pewien, jak to drugie jest naprawdę ważne w praktyce , ale serwer zdecydowanie używa dla nich zupełnie innych ścieżek kodu, więc może to na przykład prowadzić do zmiany kolejności pól. W przypadku bardzo dużych dokumentów prawdopodobnie spowoduje to wymierną różnicę w wydajności.

To pokazuje, że $inc bardzo różni się tym, że zezwala tylko na operacje, które z pewnością są na miejscu, ponieważ $inc działa tylko na typach numerycznych i oczywiście nie może zmienić rozmiaru ani typu.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Policz unikalne wartości w tablicy modelu w MongoDB

  2. połączyć się z instancją mongodb bez --authenticationDatabase admin

  3. Jak możemy zapewnić integralność danych w mongoDb?

  4. Wyjątek podczas łączenia się z mongodb in spark

  5. MongoDB nie może się uruchomić - ***przerywam po niepowodzeniu fassert()