Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pobranie indeksu przez kilka osób jednocześnie
gucio1
post 19.06.2018, 22:00:37
Post #1





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 30.04.2016

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Neutral
post 19.06.2018, 23:22:46
Post #2





Grupa: Zarejestrowani
Postów: 286
Pomógł: 46
Dołączył: 10.01.2016

Ostrzeżenie: (0%)
-----


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

Ten post edytował Neutral 19.06.2018, 23:54:07
Go to the top of the page
+Quote Post
LowiczakPL
post 20.06.2018, 06:23:03
Post #3





Grupa: Zarejestrowani
Postów: 531
Pomógł: 55
Dołączył: 3.01.2016
Skąd: Łowicz

Ostrzeżenie: (0%)
-----


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

Ten post edytował LowiczakPL 20.06.2018, 06:27:25


--------------------
Szukam zleceń Symfony, Laravel, Back-End, Front-End, PHP, MySQL ...
Go to the top of the page
+Quote Post
Pyton_000
post 21.06.2018, 07:30:24
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Generalnie: Nie

Teoretycznie: tak bo to zależy od tego jak masz skonstruowaną strukturę bazy oraz kod do obsługi. I o
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.04.2024 - 16:20