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

Radzenie sobie z warunkami wyścigowymi i głodem podczas generowania unikalnych identyfikatorów za pomocą MongoDB + NodeJS

Używasz MongoDB do przechowywania identyfikatora. To stan. Generowanie identyfikatora to funkcja. Mongodb służy do generowania identyfikatora, gdy proces mongodb pobiera argumenty funkcji i zwraca wygenerowany identyfikator. Nie chodzi o to, co robisz. Używasz nodejs do generowania identyfikatora.

Liczba wątków, a raczej pętli zdarzeń jest krytyczna, ponieważ definiuje architekturę, ale w żadnym wypadku nie potrzebujesz transakcji. Transakcje w mongodb nazywane są „transakcjami wielodokumentowymi” właśnie po to, by podkreślić, że są one przeznaczone do spójnej aktualizacji kilku dokumentów jednocześnie. Pierwszy akapit https://docs.mongodb.com/manual/core/transactions / ostrzega, że ​​jeśli zaktualizujesz pojedynczy dokument, nie będzie miejsca na transakcje.

Aplikacja jednowątkowa nie wymaga synchronizacji. Możesz niezawodnie odczytać najnowszy wygenerowany identyfikator na początku i zagwarantować, że identyfikator jest unikalny w ramach procesu nodejs. Jeśli wykluczysz mongodb i inne I/O z funkcji generowania, sprawisz, że będą one synchroniczne, dzięki czemu będziesz mógł zachować stan identyfikatora w procesie nodejs i zagwarantować jego unikalność. Po wygenerowaniu możesz trwać w bazie danych asynchronicznie. W najgorszym przypadku możesz mieć lukę w numerach sekwencyjnych, ale nie ma duplikatów.

Jeśli istnieje najmniejsza szansa, że ​​będziesz musiał przeskalować do więcej niż 1 procesu nodejs, aby obsłużyć więcej jednoczesnych żądań lub dodać kolejnego hosta dla nadmiarowości w przyszłości, będziesz musiał zsynchronizować generowanie identyfikatora i możesz użyć unikalnych indeksów Mongodb dla że. Sama funkcja nie zmienia się zbytnio, nadal generujesz identyfikator, jak w architekturze jednowątkowej, ale dodajesz dodatkowy krok, aby zapisać identyfikator w mongo. Dokument powinien mieć unikalny indeks w polu ID, więc w przypadku jednoczesnych aktualizacji jedno z zapytań pomyślnie doda dokument, a drugie zakończy się niepowodzeniem z "Błądem duplikatu klucza E11000". Łapiesz takie błędy po stronie nodejs i powtarzasz funkcję ponownie, wybierając kolejną liczbę:



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. db.createCollection nie jest funkcją

  2. Mongoose dodaje wiele obiektów do tablicy, jeśli nie istnieje na podstawie

  3. Rama agregacji Mongodb dla Grails 1.3.7

  4. MongoDB $set nie aktualizuje rekordu

  5. Jak dodać metodę schematu w manguście?