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 ?