Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobranie indeksu przez kilka osób jednocześnie
Forum PHP.pl > Forum > PHP
gucio1
Witam,
tworzę sklep internetowy który ma działać 100% bez obsługi czyli płatności tylko elektroniczne.

Pisząc, wpadłem na myśl co się stanie jeśli powiedzmy 10 osób na raz złoży zamówienie w tym samym czasie i z bazy danych zostanie pobrany kolejny numer id zamówienia.
Czy może wystąpić błąd w postaci pobrania tego samego id przez 2 osoby jeśli złożyły by zamówienie dokładnie w tej samej milisekundzie czy tam najmniejszej jednostce czasu jaką obsługuje sql?

Powinienem jakoś się przed tym zabezpieczyć? Pozdrawiam
Neutral
Moim zdaniem nie masz się czego obawiać. Jeśli REQUEST'y będą takie same, to server np. Apache zostawi je w kolejce do wykonania (skolejkuje je). O ile się nie mylę. W dokumentacji jest podane ile domyślnie na raz wykona REQUEST'ów server, ale ile skolejkuje w razie potrzeby.

http://httpd.apache.org/docs/2.2/mod/mpm_c...html#maxclients
Cytat
The MaxClients directive sets the limit on the number of simultaneous requests that will be served. Any connection attempts over the MaxClients limit will normally be queued, up to a number based on the ListenBacklog directive. Once a child process is freed at the end of a different request, the connection will then be serviced.

https://serverfault.com/questions/277664/re...request-queuing

W najnowszej wersji masz to:
http://httpd.apache.org/docs/2.4/mod/mpm_c...xRequestWorkers

Jeśli chcesz się tym pobawić musisz zajrzeć do plików konfiguracyjnych i to pozmieniać, chociaż lepiej żebyś tego nie robił, jeśli nie wiedziałbyś co robisz.

https://serverfault.com/questions/105908/ho...mit-wamp/105952
https://httpd.apache.org/docs/2.4/mod/mpm_winnt.html
https://serverfault.com/questions/796968/ap...ent-users-limit

Moim zdaniem tym czym powinieneś się przejąć to:
- miejsce na dysku
- errors w server'ze
- errors w systemie
- etc..

Chodzi oto, że gdyby Ci zabrakło miejsca na dysku, czy coś w tym stylu, to server nie miałby gdzie pomieścić danych i Twój WebServer (strona internetowa) pewnie źle by działała, a możliwe, że doszłoby do jakiego crash'u.

Poczytaj o wątkach jak działają i w jaki sposób wykonują czynności związane ze sprzętem.

https://httpd.apache.org/docs/2.4/misc/perf-tuning.html
https://wiki.mikejung.biz/Apache
https://httpd.apache.org/docs/2.4/mpm.html

Chodzi Ci chyba o ten plik konfiguracyjny: Apache\conf\extra\httpd-mpm.conf
LowiczakPL
Numerem zamówienia może być ID zamówienia lub jakiś hash aby nikt nie wiedział które to zamówienia,

Możesz sobie napisać klasę do autonumeracji, która generuje kolejny numer i na czas generowania blokuję bazę w celu wygenerowania kolejnego numeru, cała operacja trwa milisekundy więc kolejny użytkownik nawet tego nie zauważy.

Ja mam tak zrobione w Symfony do generowania numerów zamówień.

transakcje i blokada
Pyton_000
Generalnie: Nie

Teoretycznie: tak bo to zależy od tego jak masz skonstruowaną strukturę bazy oraz kod do obsługi. I o
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.