Mamy system, w którym klientom przydzielany jest produkt na zasadzie "kto pierwszy, ten lepszy".Optymalne rozwiązanie dla dużej liczby żądań w jednej tabeli bazy danych
Nasze produkty tabela zawiera wzrastających klucz główny, który rozpoczął się od zera, które używamy, aby śledzić ile produkty zostały przydzielone czyli użytkownik rezerwuje towar i zostaje przydzielona 1, następny użytkownik dostaje 2 itd
Problem polega na tym, że potencjalnie setki tysięcy użytkowników uzyska dostęp do systemu w danej godzinie. Wszyscy będą uderzać w ten jeden stół.
Ponieważ musimy upewnić się, że każdemu klientowi przydzielono tylko jeden produkt i śledzić, ile produktów zostało przydzielonych, używamy blokady rzędu dla każdego klienta uzyskującego dostęp do systemu, aby upewnić się, że pisze on do stołu przed następnym klientem. uderza w system - czyli egzekwuje regułę kto pierwszy ten lepszy.
Jesteśmy zaniepokojeni wąskim gardłem, którym jest czas przetwarzania każdego żądania wchodzącego do wersji SQL Server 2008 Enterprise Edition i blokady rzędu.
Nie możemy używać wielu serwerów, ponieważ musimy zapewnić integralność klucza pierwotnego, więc wszystko, co wymaga replikacji, nie będzie działać.
Czy ktoś zna jakieś dobre rozwiązania, które są szczególnie wydajne w obsłudze dużej liczby żądań na jednej tabeli bazy danych?
Trochę więcej informacji: Omawiana tabela zawiera zasadniczo tylko dwa pola - ID i ID klienta. Rozwiązaniem jest bezpłatne rozdanie miliona produktów - stąd oczekiwanie dużego popytu i dlaczego używanie rosnącego klucza podstawowego jako klucza ma dla nas sens - gdy klucz osiągnie milion, nie można już zarejestrować żadnych klientów. Ponadto wszystkie produkty są różne, więc przypisanie właściwego klucza jest ważne, np. pierwszych 100 klientów wprowadziło odbiór produktu o wyższej wartości niż kolejne 100 itd.
Dzięki za pomoc.
Czy możesz ponownie zaatakować, dołączyć [sqlserver] i czy możesz powiedzieć mi wersję i wydanie, jeśli edytujesz pytanie i powiesz nam, że masz 'SQL2008 Enterprise Edition' na przykład, możemy być w stanie zaoferować dopasowane rozwiązania, np. Partycjonowanie tabel jest dostępne w SQL 2008 EE –
Dzięki Jeremy. Dodano dodatkowe informacje. –
Oczywiste pierwsze pytanie; czy usunąłeś wszystko inne z transakcji, która otrzymała klucz? Na przykład. Czy wiesz, że zanim spróbujesz zdobyć klucz, wszystko, co musisz wiedzieć, wejdź do stołu i zdobądź klucz, zanim zaczniesz robić inne rzeczy? – Karl