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?
@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ć
@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.
@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ć.
#iran Ciekawe kto załatwił samolocik - pewnie Sikorski. Ale byłoby zesranie jakby stado celebrytów zostało zestrzelonych, chyba na wawelu by ich pochowano
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?
możesz sobie zapiąć w postgresie trigger z wywołaniem notyfikacji, a potem odebrać ją u siebie w kodzie. Taka prymitywna kolejka.
https://camel.apache.org/components/latest/pgevent-component.html
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ć
@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.
@mk321: websockety?
Ale websocketów z bazy do backendu nie zrobię.
?
TomTom (oddział w Łodzi) swego czasu próbowali zrobić reaktywny sterownik do postgresql. Z średnim rezultatem, ale może coś się zmieniło przez 2 lata. Opublikowany na GH, ale coś teraz nie mogę znaleźć.