2014-10-07 1 views
0

저는 Swing을 GUI로 사용하여 Java 데스크탑 애플리케이션을 개발하고 있습니다. 응용 프로그램은 데이터베이스에서 동기화 된 인터페이스를 만들기 위해 매 초마다 쿼리하는 서비스를 포함합니다. 우리 모두는 이러한 접근 방식을 통해 성과가적임을 알고 있습니다.데이터베이스 리스너 구현

내가 달성하고자하는 것은 psql (Postgres 명령 줄)을 통해 변경된 데이터베이스의 모든 변경 사항이 내 앱을 업데이트하도록 알림을 받아야한다는 것입니다. 이 방법으로 성능을 최적화 할 수 있습니다.

감사합니다.

+0

지금까지 무엇을 했습니까? 당신이 '데이터베이스'라고 말할 때 당신은 당신이 말하는 데이터베이스의 데이터 또는 당신의 데이터베이스의 구조입니까? – AndreDuarte

+0

귀하의 요구 사항은 매우 모호합니다. psql과 같은 외부적인 것들로 인해 발생하는 변경 사항을 포함하여 변경 사항을 포착 하시겠습니까, 아니면 일부 중앙 서버 응용 프로그램을 통해 변경된 사항입니까? – radai

+3

http://jdbc.postgresql.org/documentation/head/listennotify.html –

답변

3

@a_horse_with_no_name이 지적했듯이 PostgreSQL은 이러한 목적으로 비동기 알림 채널을 지원합니다.

모니터 할 테이블에 create a trigger, 아마도 plpgsql이어야합니다. 테이블이 변경되면이 트리거 fires a NOTIFY가 표시되며, 선택적으로 변경된 데이터 자체가 포함됩니다.

알림 채널에 LISTEN을 입력하고 processes any asynchronous notifications it receives을 입력하십시오.

빈 쿼리를 보내는 것이 유효하며, SELECT 1 대신이를 수행해야합니다. 예컨대 :

stmt.execute(""); 

SSL을 사용하지 않는 경우 IIRC도 그 옵션의는 순전히 클라이언트 측을 폴링하는 방법이있다. 나는 그것이 무엇인지 기억하지 못한다. 그래서 그것은 도움이되지 않는다.

트리거 유지 관리 변경 목록 테이블을 사용하거나 알림에 페이로드를 사용하여 변경된 내용을 정확하게 확인할 수 있습니다. 또는 작은 테이블이라면 전체 테이블을 다시 읽을 수 있습니다.

+0

그게 내가 필요한거야. 감사! Postgres에서는 지정된 테이블 아래에서 트리거를 만드는 것이 좋습니다. 이제 개발 및 성능면에서 많은 시간을 절약 할 수 있다는 것을 깨달았습니다. 매초마다 쿼리하면 연결 풀에 플러드가 발생합니다. 그러나 기술적으로 트리거가 단점을 갖고 있는지 여부는 여전히 알 수 없습니다. 어쩌면 내가 있는지 확인할 것입니다. –

+0

@EriezeLagera'NOTIFY'를 보내는 트리거는 매우 가볍습니다. 변경 내역 테이블을 유지하지만 여전히 과감하지 않은 경우 비용이 약간 더 비쌉니다. –