Tomasz Zadora

Tomasz Zadora programuję

Temat: Transakcje w bazach NoSQL ?

Witam,

chciałbym wykorzystać bazę NoSQL (np. MongoDB) w projekcie gdzie przynajmniej część operacji INSERT/UPDATE/DELETE wymaga transakcji, w jaki sposób w takej bazie rozwiązać np. taki problem:

START TRANSAKCJI (SERIALIZOWANA)

* pobranie danych zamówienia (SELECT `order_status` FROM `order` WHERE id = 123)
* sprawdzenie statusu zamówienia
* jeżeli niewłaściwy status KONIEC TRANSAKCJI
* zmniejszenie stanu magazynowego (UPDATE `warehouse` SET quantity = quantity - 2 WHERE product_id = 4285)
* dodanie produktu do zamówienia: (INSERT INTO `order_product` (order_id, product_id, quantity) VALUES (123, 4285, 2)
* KONIEC TRANSAKCJI

Oczywiście w czasie transakcji nie może nastąpić zmiana rekordów w tabeli `order` dla id 123 (row lock),
podobnie dla tabel `warehouse`, a nowy rekord `order_product` powinien być widoczny po zakończeniu transakcji dla innych połączeń.

Da się coś podobnego osiągnąć np. w mongodb czy też może najlepszym wyjściem jest hybryda -> część bazy na RDBMS (silniku transakcyjnym), reszta na NoSQL ?
Maciej Niedźwiecki

Maciej Niedźwiecki Born to rails hell

Temat: Transakcje w bazach NoSQL ?

Z tego co pamiętam, to Redis wspiera przynajmniej w jakimś stopniu obsługę transakcji.
Tomasz Zadora

Tomasz Zadora programuję

Temat: Transakcje w bazach NoSQL ?

Przeczytałem koncepcję "two phase commit" w mongodb:

http://www.mongodb.org/display/DOCS/two-phase+commit

ale to co oferuje redis wygląda na na lepsze:

http://redis.io/topics/transactions

Następna dyskusja:

Hierarchiczne dane w relacy...




Wyślij zaproszenie do