ďťż
 
[MySQL4.1] jak =?ISO-8859-2?Q?przypilnowa=E6_warto=B6ci_UNSI?==?ISO-8859-2?Q?GNED=3F?= ďťż
 
[MySQL4.1] jak =?ISO-8859-2?Q?przypilnowa=E6_warto=B6ci_UNSI?==?ISO-8859-2?Q?GNED=3F?=
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

[MySQL4.1] jak =?ISO-8859-2?Q?przypilnowa=E6_warto=B6ci_UNSI?==?ISO-8859-2?Q?GNED=3F?=



sendzia - 15-06-2006 00:34
[MySQL4.1] jak =?ISO-8859-2?Q?przypilnowa=E6_warto=B6ci_UNSI?==?ISO-8859-2?Q?GNED=3F?=
  Witam!

W tabeli mam kolumnę typu BIGINT UNSIGNED. Aplikacja php dokonuje zmian
wartości w tej kolumnie w wyniku akcji użytkownika. Przed każdym
zmniejszeniem/zwiększeniem wartości aplikacja sprawdza, czy wartość nie
jest za mała/duża.

Przykład:
- Wartość w kolumnie = 50
- User1 sprawdza czy wartość >= 30
- User1 zmniejsza wartość o 30
- Wartość w kolumnie = 20
- User2 sprawdza czy wartość >= 25
- User2 dostaje odmowę zmniejszenia wartości o 25

Problem w tym, że istnieje ryzyko zejścia się w czasie akcji wykonanych
przez 2 lub więcej userów.

Przykład:
- Wartość w kolumnie = 50
- User1 sprawdza czy wartość >= 30
- User2 sprawdza czy wartość >= 25
- User1 zmniejsza wartość o 30
- Wartość w kolumnie = 20
- User2 zmniejsza wartość o 25

Co oczywiście kończy się w MySQL "przekręceniem licznika", a ja w tym
momencie dostaję w zęby.

Da się przed tym zabezpieczyć na poziomie MySQL?

--
The real problem is not whether machines think but whether men do.
B. F. Skinner





=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 15-06-2006 00:34

  sendzia wrote:
> Witam!
>
> W tabeli mam kolumnę typu BIGINT UNSIGNED. Aplikacja php dokonuje zmian
> wartości w tej kolumnie w wyniku akcji użytkownika. Przed każdym
> zmniejszeniem/zwiększeniem wartości aplikacja sprawdza, czy wartość nie
> jest za mała/duża.
>
> Przykład:
> - Wartość w kolumnie = 50
> - User1 sprawdza czy wartość >= 30
> - User1 zmniejsza wartość o 30
> - Wartość w kolumnie = 20
> - User2 sprawdza czy wartość >= 25
> - User2 dostaje odmowę zmniejszenia wartości o 25
>
> Problem w tym, że istnieje ryzyko zejścia się w czasie akcji wykonanych
> przez 2 lub więcej userów.
>
> Przykład:
> - Wartość w kolumnie = 50
> - User1 sprawdza czy wartość >= 30
> - User2 sprawdza czy wartość >= 25
> - User1 zmniejsza wartość o 30
> - Wartość w kolumnie = 20
> - User2 zmniejsza wartość o 25
>
> Co oczywiście kończy się w MySQL "przekręceniem licznika", a ja w tym
> momencie dostaję w zęby.
>
> Da się przed tym zabezpieczyć na poziomie MySQL?

Tak, trzeba używać transakcji i select for update, albo lockować wiersz.

--
P.M.




sendzia - 16-06-2006 00:54

  Paweł Matejski napisał(a):
> sendzia wrote:
>> Witam!
>>
>> W tabeli mam kolumnę typu BIGINT UNSIGNED. Aplikacja php dokonuje zmian
>> wartości w tej kolumnie w wyniku akcji użytkownika. Przed każdym
>> zmniejszeniem/zwiększeniem wartości aplikacja sprawdza, czy wartość nie
>> jest za mała/duża.
>>
>> Przykład:
>> - Wartość w kolumnie = 50
>> - User1 sprawdza czy wartość >= 30
>> - User1 zmniejsza wartość o 30
>> - Wartość w kolumnie = 20
>> - User2 sprawdza czy wartość >= 25
>> - User2 dostaje odmowę zmniejszenia wartości o 25
>>
>> Problem w tym, że istnieje ryzyko zejścia się w czasie akcji wykonanych
>> przez 2 lub więcej userów.
>>
>> Przykład:
>> - Wartość w kolumnie = 50
>> - User1 sprawdza czy wartość >= 30
>> - User2 sprawdza czy wartość >= 25
>> - User1 zmniejsza wartość o 30
>> - Wartość w kolumnie = 20
>> - User2 zmniejsza wartość o 25
>>
>> Co oczywiście kończy się w MySQL "przekręceniem licznika", a ja w tym
>> momencie dostaję w zęby.
>>
>> Da się przed tym zabezpieczyć na poziomie MySQL?
>
> Tak, trzeba używać transakcji i select for update, albo lockować wiersz.
>

Ok. Dokształciłem się już. Ale martwi mnie taki problem: Używam w php
stałych połączeń z bazą. Czy przypadkiem wszystkie zapytania, które
wysyla php do bazy nie są widziane jako zapytania jednego klienta?
Inaczej mówiąc czy user2 wykonując akcję (która zaczyna nową transakcję)
może spowodować COMMIT transakcji zaczętej przez usera1? (Sorry, że tu o
php pytam.)

--
The real problem is not whether machines think but whether men do.
B. F. Skinner




=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 16-06-2006 00:55

  sendzia wrote:

> Ok. Dokształciłem się już. Ale martwi mnie taki problem: Używam w php
> stałych połączeń z bazą. Czy przypadkiem wszystkie zapytania, które
> wysyla php do bazy nie są widziane jako zapytania jednego klienta?
> Inaczej mówiąc czy user2 wykonując akcję (która zaczyna nową transakcję)
> może spowodować COMMIT transakcji zaczętej przez usera1? (Sorry, że tu o
> php pytam.)

Dla transakcji nie ma znaczenia user, a połączenie. Musisz tylko na
początku skryptu założyć, że nie wiadomo w jakim stanie odtrzymujesz
połączenie do bazy (mogą być nie zatwierdzone transakcje).

--
P.M.





Rafal sxat - 16-06-2006 00:56
=?iso-8859-2?Q?Re:_=5BMySQL4.1=5D_jak_przypilnowa=E6_warto=B6 ci_UNSIGNE?= =?iso-8859-2?Q?D=3F?=
  > >> Co oczywiście kończy się w MySQL "przekręceniem licznika", a ja w tym
> >> momencie dostaję w zęby.
> >>

update xxx set xx=xxa where <costam> and xx-xxa>0 and ....costam...
i sprawdzamy tylko ilosc rekordow przetworzonych i po krzyku...
moze byc tak?

--
Archiwum grupy: http://niusy.onet.pl/pl.comp.bazy-danych
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [MS SQL 2005] =?windows-1250?Q?Ilo=9C=E6_wiersz=F3w_w_zbiorze_wynikowym?= InterSystems =?windows-1250?Q?Cach=E9_-_uzywal_ktos=3F?= Wydajność baz danych w zależności od poziomu izolacji ANSI/ISO Czy zna (obsługuje) ktoś program Iso Draw ? MYSQL - kodowanie w ISO-PL strona plus baza w iso do utf-8 Kodowanie: z iso na utf SELECT MAX(nazwaPola) FROM tabela WHERE .... i ORA-01405: pobran? warto?ci? kolumny jest NULL do czego uzywac perl-a? czy warto poznac ten jezyk ksiazka 'Skanowanie i poltony' - czy warto kupic?
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • latwa-kasiora.pev.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com