폴링이 데이터베이스에서 앱 데이터를 업데이트하는 유일한 방법입니까?


17

응용 프로그램은 데이터베이스에서 가능한 한 최신 데이터를 업데이트해야합니다. 이 경우 데이터베이스를 요청 (폴링)하는 타이머 외에 데이터를 얻는 다른 방법이 있습니까?

MS SQL Server 2008 (및 .NET 응용 프로그램 + Entity Framework)과 함께 작업하지만 다른 유형의 데이터베이스에 대해서도 알고 싶습니다.


Microsoft StreamInsight 는 "데이터 이벤트"기반 처리를 지원하도록 특별히 설계되었습니다. 잘 모르지만 SQL Server의 개별 기능이 아니라 완전하고 독립적 인 플랫폼처럼 보입니다. StreamInsight 아키텍처 다이어그램 은 다음과 같습니다 .
Nick Chammas

답변:


5

SQL Server 2005+ 용 Service Broker 가이를 수행 할 수 있습니다.

죄송합니다. 다른 RDBMS를 잘 모르겠습니다


2
Service Broker가이를 수행하는 방법에 대해 자세히 설명 할 수 있습니까? @rem은 데이터베이스에서 이벤트 트리거 업데이트 (시간 트리거와 반대로)를 검색하는 방법을 묻습니다. SB는 대기열 및 asyc 처리를위한 것입니다.
Nick Chammas

1
-1 Service Broker에는 메시지를 받았음을 앱에 알리기 위해 내장 된 것이 없습니다. (나는 현재이 문제에 갇혀있다.)
Vaccano

10

Oracle에서는이를 위해 내장 DBMS_ALERT 패키지 를 사용할 수 있습니다 .

DBMS_ALERT는 데이터베이스 이벤트 (경고)의 비동기 알림을 지원합니다. 이 패키지 및 데이터베이스 트리거를 적절하게 사용하면 데이터베이스에서 관심있는 값이 변경 될 때마다 응용 프로그램이 자체적으로 알릴 수 있습니다.

그래픽 도구가 데이터베이스 테이블의 일부 데이터 그래프를 표시한다고 가정하십시오. 그래픽 도구는 데이터를 읽고 그래프로 작성한 후 방금 읽은 데이터를 다루는 데이터베이스 경고 (WAITONE)를 기다릴 수 있습니다. 다른 사용자가 데이터를 변경하면 도구가 자동으로 작동합니다. 데이터베이스 테이블에 트리거를 배치하면 트리거가 실행될 때마다 신호 (SIGNAL)가 수행됩니다.


그리고 OP 질문에 따른 "MS SQL Server 2008"은? 그들은 다른 RDBMS를 요청했지만 실제로는 도움이되지 않습니다.
gbn

9
@gbn 왜 도움이되지 않습니까? 가능한 한 SQL Server 파트에 응답 할 수 없으므로 가능한 파트에 응답했습니다. 다른 모든 데이터베이스에 대한 전문가는 없지만, 우리가 각각 우리의 지식에 기여하면 OP와 미래 방문자는 유용한 정보를 찾을 수 있습니다. OP가 SQL Server 답변을 수락하고 ScottCher와 같은 다른 유용한 답변을 공개 투표 할 것으로 기대합니다 (+1).
레이 리펠

잘했다. DBMS_ALERT 답변을 읽은 후 도구 상자를위한 더 많은 도구 인 다른 방법을 배웠습니다! +1
ScottCher

7

특정 데이터베이스 공급 업체는 앱이 간단하게 구독 할 수있는 통합 메시지 버스도 제공합니다.

대안은 Tibco / RV 와 같은 메시지 버스를 통해 데이터를 데이터베이스에 먼저 라우팅 하고 단순히 "분기"하여 DB로가는 스트림과 응용 프로그램으로가는 스트림에서 또는 코 히어 런스 와 같은 캐싱 계층을 사용하는 것입니다. 앱과 DB 간.


7

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 드라이버를 사용할 수 있습니다


5

다른 Oracle 솔루션 : Microsoft는 데이터베이스 변경 알림 을 활용하는 Microsoft의 닷넷 프레임 워크를 사용하는 애플리케이션을 개발했습니다. ODP.Net (dotnet 용 Oracle 데이터 공급자)과 함께 Oracle 기능을 . 이를 사용하여 데이터베이스는 새로운 데이터가 도착했을 때 실제로 도트 폴 응용 프로그램에 통보하여 지속적인 폴링을 피할 수 있습니다. 위에서 언급 한 링크는이를 수행하기위한 Oracle 튜토리얼입니다. 이것이 도움이되기를 바랍니다.

다른 RDBMS에 대해 모른다.


2

우리는 응용 프로그램 중 하나 (여러 개의 Chrome 및 Chrome에만 액세스)의 경우 sys_exec UDF 와 함께 MySQL을 사용하고 있습니다. 기본적으로 WebSocket 지원으로 인해 Chrome이 필요한 이유.

중요 업데이트 / 삽입 / 삭제가 발생하면 특정 트리거에 새로 추가 된 sys_exec 기능을 통해 외부 프로그램이 호출됩니다. 이 시점에서 모든 것이 실시간으로 발생하므로 폴링이나 여러 쿼리가 필요없이 연결된 모든 클라이언트에게 메시지를 릴레이하는 데 필요한 모든 것이 있습니다.


1

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를 사용하는 제품 중 하나를 연구하고 있습니다.)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.