konto usunięte

Temat: Jak najlepiej zrezalizować Optimistic Locking?

Witam,
może dla osób, które nie są "skażone" aplikacjami wykorzystującymi "persistent connections" do baz danych (np. Oracle Forms) odpowiedź na to pytanie będzie banalne...

Dla przykładu - podczas czytania dokumentacji PostgreSQL znalazłem, że dla każdej tabeli istnieje kolumna systemowa XMIN (transaction id), którą teoretycznie można wykorzystać do sprawdzania, czy podczas połączenia "stateless" dane nie zostały zmodyfikowane przez innego użytkownika.

Inne przykłady - to dodatkowe kolumny typu TIMESTAMP lub NUMERIC aktualizowane via TRIGGER lub już bezpośrednio przez aplikację podczas wykonywania DML.

Sensownym wydaje się zaopatrzenie dodatkowych kolumn, które nie niosą żadnej cennej informacji dla aplikacji (poza kontrolą wersji wiersza podczas połączeń typy "stateless") w odpowiednie indeksy.

Jak więc Waszym zdaniem najlepiej poradzić sobie z "optimistic locking" w przypadku aplikacji nie wykorzystujących stałych połączeń do bazy danych?

Interesują mnie w szczególności wszelkie "best practises", ewentualnie porównanie różnych metod.

Pozdrawiam, PiotrPiotr P. edytował(a) ten post dnia 13.12.11 o godzinie 16:28
Paweł Pasztaleniec

Paweł Pasztaleniec Lead Consultant -
CGI

Temat: Jak najlepiej zrezalizować Optimistic Locking?

W oracle od wersji 10g jest Pseudocolumna ORA_ROWSCN.

Pozdrawiam
Paweł

konto usunięte

Temat: Jak najlepiej zrezalizować Optimistic Locking?

Paweł Pasztaleniec:
W oracle od wersji 10g jest Pseudocolumna ORA_ROWSCN.

Pozdrawiam
Paweł

Zgadza się, ale z jednym małym wyjątkiem w przypadku ORA_ROWSCN w Oracle-u

"This pseudocolumn is useful for determining approximately when a row was last updated. It is not absolutely precise, because Oracle tracks SCNs by transaction committed for the block in which the row resides. You can obtain a more fine-grained approximation of the SCN by creating your tables with row-level dependency tracking. Please refer to CREATE TABLE ... NOROWDEPENDENCIES | ROWDEPENDENCIES for more information on row-level dependency tracking"

Ale to tylko "oracle-owa" dygresja :-) - chodziło mi raczej o techniki programistyczne, ich ranking, doświadczenia z wykorzystania w produkcji w połączeniu z konkretnym językiem programowania (PHP, DOT.NET, JAVA) itp. Podałem przykład PostgreSQL-a ponieważ ostatnio hobbistycznie studiuję dokumentację PostgreSQLa .

Pozdrawiam, Piotr
Paweł Grzegorz Kwiatkowski

Paweł Grzegorz Kwiatkowski Architekt
oprogramowania,
Ericsson

Temat: Jak najlepiej zrezalizować Optimistic Locking?

Programistycznie to:

1) Kolumna z informacją o wersji.
2) Unikać sytuacji, w której mogłoby dojść do kolizji przy równoczesnym update :) (np. przez wprowadzenie procesów "dispatchera" / "workerów"). Takie rozdzielenie pracy sprawdza się przy przetwarzaniu batchowym.

konto usunięte

Temat: Jak najlepiej zrezalizować Optimistic Locking?

Standard jest taki, że dodaje się kolumnę i w niej trzyma wersję rekordu. Update ma warunek:
"id = :id and version = :version", zamiast "id = :id" - w ten sposób jeżeli okaże się, że zmieniono 0 wierszy - ktoś był szybszy. ORMy obsługują taki bajer, wystarczy skonfigurować.Michał Z. edytował(a) ten post dnia 16.12.11 o godzinie 10:50



Wyślij zaproszenie do