응용 프로그램은 데이터베이스에서 가능한 한 최신 데이터를 업데이트해야합니다. 이 경우 데이터베이스를 요청 (폴링)하는 타이머 외에 데이터를 얻는 다른 방법이 있습니까?
MS SQL Server 2008 (및 .NET 응용 프로그램 + Entity Framework)과 함께 작업하지만 다른 유형의 데이터베이스에 대해서도 알고 싶습니다.
응용 프로그램은 데이터베이스에서 가능한 한 최신 데이터를 업데이트해야합니다. 이 경우 데이터베이스를 요청 (폴링)하는 타이머 외에 데이터를 얻는 다른 방법이 있습니까?
MS SQL Server 2008 (및 .NET 응용 프로그램 + Entity Framework)과 함께 작업하지만 다른 유형의 데이터베이스에 대해서도 알고 싶습니다.
답변:
SQL Server 2005+ 용 Service Broker 가이를 수행 할 수 있습니다.
죄송합니다. 다른 RDBMS를 잘 모르겠습니다
Oracle에서는이를 위해 내장 DBMS_ALERT 패키지 를 사용할 수 있습니다 .
DBMS_ALERT는 데이터베이스 이벤트 (경고)의 비동기 알림을 지원합니다. 이 패키지 및 데이터베이스 트리거를 적절하게 사용하면 데이터베이스에서 관심있는 값이 변경 될 때마다 응용 프로그램이 자체적으로 알릴 수 있습니다.
그래픽 도구가 데이터베이스 테이블의 일부 데이터 그래프를 표시한다고 가정하십시오. 그래픽 도구는 데이터를 읽고 그래프로 작성한 후 방금 읽은 데이터를 다루는 데이터베이스 경고 (WAITONE)를 기다릴 수 있습니다. 다른 사용자가 데이터를 변경하면 도구가 자동으로 작동합니다. 데이터베이스 테이블에 트리거를 배치하면 트리거가 실행될 때마다 신호 (SIGNAL)가 수행됩니다.
특정 데이터베이스 공급 업체는 앱이 간단하게 구독 할 수있는 통합 메시지 버스도 제공합니다.
대안은 Tibco / RV 와 같은 메시지 버스를 통해 데이터를 데이터베이스에 먼저 라우팅 하고 단순히 "분기"하여 DB로가는 스트림과 응용 프로그램으로가는 스트림에서 또는 코 히어 런스 와 같은 캐싱 계층을 사용하는 것입니다. 앱과 DB 간.
PostgreSQL의 청취 / 공지
http://www.postgresql.org/docs/current/static/sql-notify.html
데이터베이스에서 ...
NOTIFY static_channel_name, 'static-message';
또는 함수 / 트리거에서 :
perform pg_notify('dynamic-channel-name', 'dynamic-message');
데이터베이스 클라이언트에서 :
LISTEN some_channel_name; --note the lack of quotes
LISTEN 클라이언트는 PostgreSQL 프로세스 ID, 채널 이름 및 메시지 값을받습니다.
PostgreSQL의 표준 JDBC 드라이버는 알림을 좋아하지 않지만 이 목적으로 https://github.com/impossibl/pgjdbc-ng 드라이버를 사용할 수 있습니다
다른 Oracle 솔루션 : Microsoft는 데이터베이스 변경 알림 을 활용하는 Microsoft의 닷넷 프레임 워크를 사용하는 애플리케이션을 개발했습니다. ODP.Net (dotnet 용 Oracle 데이터 공급자)과 함께 Oracle 기능을 . 이를 사용하여 데이터베이스는 새로운 데이터가 도착했을 때 실제로 도트 폴 응용 프로그램에 통보하여 지속적인 폴링을 피할 수 있습니다. 위에서 언급 한 링크는이를 수행하기위한 Oracle 튜토리얼입니다. 이것이 도움이되기를 바랍니다.
다른 RDBMS에 대해 모른다.
우리는 응용 프로그램 중 하나 (여러 개의 Chrome 및 Chrome에만 액세스)의 경우 sys_exec UDF 와 함께 MySQL을 사용하고 있습니다. 기본적으로 WebSocket 지원으로 인해 Chrome이 필요한 이유.
중요 업데이트 / 삽입 / 삭제가 발생하면 특정 트리거에 새로 추가 된 sys_exec 기능을 통해 외부 프로그램이 호출됩니다. 이 시점에서 모든 것이 실시간으로 발생하므로 폴링이나 여러 쿼리가 필요없이 연결된 모든 클라이언트에게 메시지를 릴레이하는 데 필요한 모든 것이 있습니다.
Oracle GoldenGate와 JPA (Java Persistence API)의 조합을 사용하여 Oracle 데이터베이스뿐만 아니라 DB2, Sybase, Microsoft SQL Server, MySQL, Teradata 등에서도이를 수행합니다.이 기능은 여기에 설명되어 있습니다. http : // docs .oracle.com / middleware / 1212 / coherence / COHIG / golden_g.htm
GoldenGate의 기능은 데이터베이스 트랜잭션 로그를 네트워크의 어느 곳에서나 사용할 수있는 필터링 가능한 이벤트 스트림으로 전환하는 것입니다. 우리는이를 사용하여 관련 트랜잭션을 캐시 업데이트 또는 캐시 무효화로 전환합니다. 두 가지 모두 애플리케이션 수준 이벤트를 트리거 할 수 있습니다 (예 : 데이터를 데스크톱 또는 HTML5 웹 소켓 애플리케이션으로 밀어 내기).
(전체 공개를 위해 Oracle에서 GoldenGate를 사용하는 제품 중 하나를 연구하고 있습니다.)