Nie możemy serializować rejestracji, ponieważ miliony użytkowników rejestrują się jednocześnie. Konieczne są równoległe rejestracje.
Załóżmy, że baza danych nie zawiera nazwy użytkownika „użytkownik1”. Gdy dwóch użytkowników spróbuje zarejestrować się w tym samym momencie jako „użytkownik1”, zaakceptuje to. Ale później spowoduje problemy. To nie powinno się zdarzyć.
Szukam logicznego rozwiązania. Nic konkretnego. Pomysł, aby to rozwiązać.
database
multithreading
Addzy K
źródło
źródło
Odpowiedzi:
Dlaczego miałby to akceptować? Łatwo jest zastosować unikalne ograniczenie, użyć nazwy użytkownika jako klucza podstawowego lub po prostu uruchomić kod aplikacji do odprawy w ramach transakcji.
Absolutnie powinieneś być w stanie użyć transakcji bazy danych, aby użyć bazy danych, aby temu zapobiec. W przeciwnym razie żadna aplikacja nie byłaby w stanie utrzymać niezmienników w danych bazy danych.
Jeśli chodzi o skalowanie, bazy danych wymyśliły już potrzebne technologie, takie jak różne tryby blokowania w zależności od tego, jakiej dokładnie potrzebujesz spójności, rozproszone bazy danych dla wielu serwerów baz danych itp.
źródło
Istnieje standardowe rozwiązanie tego problemu. Utwórz wielu pracowników, aby dokonać rejestracji. Każde żądanie ma skrót zastosowany do nazwy użytkownika, a skrót określa, który pracownik przetwarza żądanie. W ten sposób nie ma możliwości jednoczesnego przetwarzania dwóch żądań dla tej samej nazwy użytkownika.
W przypadku tego rodzaju liczby zapytań rozważ magazyn rozproszonych wartości kluczy, taki jak ryzyko, zamiast całej bazy danych jako magazyn danych.
źródło
To jest problem ?
Zezwolenie dwóm użytkownikom na zakończenie rejestracji przy użyciu niepowtarzalnej nazwy użytkownika jest niedopuszczalne, jeśli nazwa użytkownika (a nie adres e-mail użytkownika) jest używana do logowania.
Jeśli nazwa użytkownika nie jest używana do uwierzytelnienia, możesz użyć jakiegoś procesu w tle, aby zidentyfikować i oflagować podwójne (na przykład na podstawie znacznika czasu) i zmusić użytkownika do zmiany swojej nazwy użytkownika przy następnym logowaniu
Tak, to jest problem
Jak pytasz, przypuszczam, że nazwa użytkownika powinna być unikalnym identyfikatorem. Można zastosować następujące podejścia:
źródło
Zastanów się, co uważasz za unikalny identyfikator użytkownika. Każdy użytkownik ma już unikalny adres e-mail, więc problem został już rozwiązany. Oczywiście oznacza to, że wielu użytkowników będzie mogło zarejestrować tę samą nazwę, na przykład „Mike Nakis”. Czy jest z tym problem? Jesteś pewny? Na przykład nie jest to problemem na Facebooku. Istnieje wielu użytkowników Facebooka o nazwie „Mike Nakis”. Spójrz na stronę logowania na Facebooku: prosi o „e-mail lub telefon” i „hasło”.
źródło
Przy milionach użytkowników rejestrujących się w tym samym czasie, korzystasz tylko z 26 x 26 serwerów rejestracyjnych, jednego dla użytkowników rozpoczynających się na aa, jednego dla użytkowników rozpoczynających się na ab i tak dalej. W rezultacie jednocześnie na każdym serwerze rejestrują się tylko tysiące użytkowników. Jeśli nadal nie możesz sobie z tym poradzić, użyj serwerów 26 x 26 x 26.
źródło