Wpis z mikrobloga

#programowanie #bazydanych #java #spring

tl;dr: jak zrobić produkcyjnie rective relacyjną bazę w Javie/Springu?

Żeby na froncie dane był pokazywane na żywo (a nie odświeżane np. co sekundę) to stosuje się Websockety (komunikacja pomiędzy frontem a backendem).

A co z komunikacją pomiędzy backendem z bazą danych?
- Jak stosuje się bazy NoSQL np. MongoDB, to nie ma problemu, bo da się w Jave/Springu zasubskrybować na zmiany w bazie (podejście reactive tzn. Flux/Mono).
- Co z relacyjnymi bazami danych (np. PostgreSQL, Oracle, MS SQL)? Zwykłe JDBC nie wspiera podejścia reactive (A bez tego nie wiadomo kiedy coś się w bazie zmieniło bez sprawdzania co np. sekundę). Teoretycznie jest R2DBC, ale to bardzo wczesna wersja i chyba nikt nie używa tego na produkcji. Jak ludzie to robią produkcyjnie z relacyjnymi bazami?
  • 13
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@globalbus: no właśnie nie chciałbym robić jakiś dziwnych rzeczy, tylko użyć czegoś standardowego. Soft ma być utrzymywany parę lat.

Mam tylko wymaganie, że muszę mieć dane "na żywo".
1) Tylko pod to jedno wymaganie zmienić bazę relacyjną (super wsparcie JPA/Hibernate; mam w zespole specjalistów od relacyjnych baz) na NoSQL (wsparcie non blocking, ale dużo gorzej z JPA; nikt w zespole dobrze nie zna nierelacyjnych)?
2) Zostawić bazę relacyjną, ale użyć
  • Odpowiedz
postgresie


@globalbus: będę musiał wspierać kilka baz np. obowiązkowo Postgres i dodatkowo jedna z Oracle/MS SQL/MySQL/MariaDB. Między innymi dlatego też używam JPA/Spring Data. Wiem, że zawsze jakiś wyjątek trzeba zrobić pod kolejną bazę, ale chciałbym jak najmniej używać specyficznych rzeczy z konkretnej bazy.
  • Odpowiedz
@mk321: jeżeli to ma być monolit, to chyba można podejść do tego inaczej. Pomiędzy repozytorium a resztą aplikacji zrób jakiegoś pośrednika, i zastosuj obserwatora który będzie powiadamiał websocketa o zmianach w tabeli. Na upartego w mikroserwisach też da się to zastosować.
  • Odpowiedz
@krasnoludkolo: tak, pomiędzy frontem a backendem:

(Oczywiście na froncie muszą być websockety, ale to nie problem - problem z backendem i bazą.)


Ale websocketów z bazy do backendu nie zrobię.
  • Odpowiedz