Aplikacja musi mieć zaktualizowane dane z bazy danych, jak to możliwe. W takim przypadku, czy jest jakiś inny sposób na uzyskanie danych, poza żądaniem (odpytywaniem) bazy danych na podstawie timera?
Pracuję z MS SQL Server 2008 (i aplikacjami .NET + Entity Framework), ale chciałbym również poznać inne typy baz danych.
Odpowiedzi:
Service Broker dla SQL Server 2005+ może to zrobić.
Przepraszam, nie jestem pewien innych RDBMS
źródło
W Oracle możesz użyć wbudowanego pakietu DBMS_ALERT, aby to ułatwić.
źródło
Niektórzy dostawcy baz danych zapewniają również zintegrowane szyny komunikatów, które Twoja aplikacja może po prostu subskrybować:
Alternatywą byłoby kierowanie danych do bazy danych w pierwszej kolejności za pośrednictwem magistrali komunikatów, takiej jak Tibco / RV, i po prostu „rozgałęzienie” ich w strumieniu przechodzącym do bazy danych i jednego do aplikacji lub użycie warstwy buforującej, takiej jak Coherence między twoją aplikacją a bazą danych.
źródło
LISTEN / NOTIFY dla PostgreSQL
http://www.postgresql.org/docs/current/static/sql-notify.html
w bazie danych ...
lub w funkcji / wyzwalacz:
w kliencie bazy danych:
Klient LISTEN otrzyma identyfikator procesu PostgreSQL, nazwę kanału i wartość komunikatu.
Standardowy sterownik JDBC dla PostgreSQL nie lubi powiadomień, można jednak użyć do tego celu https://github.com/impossibl/pgjdbc-ng sterownika
źródło
Inne rozwiązanie Oracle: Opracowaliśmy aplikacje wykorzystujące platformę dotnet firmy Microsoft, które korzystają z funkcji powiadomienia o zmianie bazy danych Oracle w połączeniu z ODP.Net (dostawcą danych Oracle dla dotnet). Korzystając z tego, baza danych faktycznie powiadamia aplikację dotnet o pojawieniu się nowych danych, co pozwala nam uniknąć ciągłego odpytywania. Odnośnik, do którego odwołuję się powyżej, to samouczek Oracle dotyczący tego. Mam nadzieję, że to ci pomoże.
Nie wiem o żadnych innych RDBMS.
źródło
W przypadku jednej z naszych aplikacji (dostępnej przez Chrome i TYLKO Chrome) używamy MySQL z sys_exec UDF . Zasadniczo dlaczego Chrome - ze względu na obsługę WebSocket.
Po wystąpieniu krytycznej aktualizacji / wstawiania / usuwania program zewnętrzny jest wywoływany przez nowo dodaną funkcjonalność sys_exec osadzoną w niektórych wyzwalaczach. W tym momencie mamy wszystko, czego potrzebujemy, aby przekazać wiadomość każdemu podłączonemu klientowi bez potrzeby odpytywania lub wielu zapytań, ponieważ wszystko dzieje się w czasie rzeczywistym.
źródło
Używamy kombinacji Oracle GoldenGate i Java Persistence API (JPA), aby zrobić to z bazą danych Oracle, ale także z DB2, Sybase, Microsoft SQL Server, MySQL, Teradata itp. Funkcja ta jest opisana tutaj: http: // docs .oracle.com / middleware / 1212 / coherence / COHIG / golden_g.htm
GoldenGate przekształca dziennik transakcji bazy danych w filtrowany strumień zdarzeń, który można wykorzystać w dowolnym miejscu w sieci. Używamy go do przekształcania odpowiednich transakcji w aktualizacje pamięci podręcznej lub unieważnienia pamięci podręcznej, które mogą wyzwalać zdarzenia na poziomie aplikacji, np. Wypychając dane do aplikacji komputerowych lub aplikacji websocket HTML5.
(W celu pełnego ujawnienia informacji pracuję w Oracle nad jednym z produktów wykorzystujących GoldenGate.)
źródło