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

MongoDB i złożone klucze podstawowe

Powinieneś wybrać opcję 1.

Głównym powodem jest to, że martwisz się o wydajność – użycie indeksu _id, który jest zawsze obecny i już unikalny, pozwoli Ci zaoszczędzić na konieczności utrzymywania drugiego unikalnego indeksu.

W przypadku opcji 1 martwię się o wydajność wstawiania do posiadania kluczy niesekwencyjnych. Wiem, że może to zabić tradycyjne systemy RDBMS i widziałem wskazówki, że może to być prawdą również w MongoDB.

Twoje inne opcje nie pozwalają uniknąć tego problemu, po prostu przesuwają go z indeksu _id do drugorzędnego unikalnego indeksu - ale teraz masz dwa indeksy, raz zbalansowany w prawo, a drugi z dostępem losowym.

Istnieje tylko jeden powód, aby kwestionować opcję 1, a mianowicie, jeśli planujesz uzyskać dostęp do dokumentów za pomocą tylko jednej lub tylko drugiej wartości UUID. Tak długo, jak zawsze podajesz obie wartości i (ta część jest bardzo ważna) zawsze porządkujesz je w ten sam sposób we wszystkich swoich zapytaniach, indeks _id będzie skutecznie spełniał swoje zadanie.

Jako wyjaśnienie, dlaczego musisz się upewnić, że zawsze porządkujesz dwie wartości UUID w ten sam sposób, podczas porównywania poddokumentów { a:1, b:2 } nie jest równe { b:2, a:1 } - możesz mieć kolekcję, w której dwa dokumenty mają te wartości dla _id. Więc jeśli najpierw przechowujesz _id z polem, musisz zawsze zachować tę kolejność we wszystkich swoich dokumentach i zapytaniach.

Inną przestrogą jest to, że indeks _id:1 będzie użyteczny dla zapytania:

db.collection.find({_id:{a:1,b:2}}) 

ale to nie być użytecznym dla zapytania

db.collection.find({"_id.a":1, "_id.b":2})


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak sortować mongodb z pymongo

  2. CouchDB vs. MongoDB:10 rzeczy, które powinieneś wiedzieć

  3. Jak mogę wygenerować ObjectId z mangustą?

  4. 5 sposobów na wybranie wierszy o maksymalnej wartości dla ich grupy w SQL

  5. Nieudana inicjalizacja globalna:BadValue Nieprawidłowa wartość lub brak ustawień regionalnych użytkownika. Upewnij się, że zmienne środowiskowe LANG i/lub LC_* są ustawione poprawnie