2009-11-17 2 views
2

다른 응용 프로그램에서 사용자 입력에 따라 X 번 업데이트되는 DB2 데이터베이스에 비 눈에 띄는 크기의 테이블이 있습니다. 이 테이블은 다른 웹 사용자에게 정보를 표시하기 위해 내 웹 앱에서도 읽혀집니다. 필자는 웹 응용 프로그램에 많은 수의 사용자가 있으며 정확한 최신 데이터가 포함 된 많은 퍼지 문자열 조회를 수행해야합니다. 그래서 퍼지 로직을 실행하고 DB가 망치지 않게하려면 서버 측 캐시가 필요합니다.테이블 데이터가 업데이트 될 때 DB2가 웹 응용 프로그램에 알릴 수 있습니까?

그래서 가장 좋은 옵션은 무엇입니까? 나는 데이터가 거의 변하지 않을 때마다 전체 테이블을 당기는 것을 싫어한다. 더 작은 테이블의 타임 스탬프를 업데이트하고 캐시를 새로 고침해야하는지 알기 위해 트리거를 설정할 수 있지만 해커처럼 보입니다.

이상하게도 DB2가 내 웹 응용 프로그램에 변경 사항을 알리거나 데이터 수준 변경을 감지하는 매우 간단한 메커니즘을 제공하고 싶습니다.

답변

0

웹 응용 프로그램이 WebSphere에서 실행되고 있다면 MQ를 설정하는 것이 좋은 해결책 일 것이라고 생각합니다.

MQ Series routines을 사용하여 대기열에 항목을 추가하는 트리거를 작성할 수 있으며 웹 응용 프로그램이 대기열에 가입하여 업데이트를 수신 할 수 있습니다.

웹 응용 프로그램이 WebSphere에없는 경우에도이 옵션을 계속 볼 수는 있지만 더 어려울 수 있습니다.

+0

작동하는 것처럼 보입니다. 우리는 WebLogic을 사용하여 이것이 얼마나 까다로울 지 아직 확실하지 않습니다. – Andrew

0

간단한 해결책은 테이블을 최신으로 변경하기위한 타임 스탬프 (어딘가)를 갖는 것일 수 있습니다.

타임 스탬프는 큰 테이블을 업데이트하는 응용 프로그램이나 큰 테이블의 update-trigger에 의해 업데이트되는 작은 테이블/뷰에있을 수 있습니다.
update-triggers only 작업은 "help"-timestamp를 currenttimestamp로 업데이트하는 것입니다.

그런 다음 webapp은이 타임 스탬프 만 확인합니다.
타임 스탬프가 더 새로운 경우 웹 응용 프로그램이 가지고있는 데이터가 큰 테이블에서 다시 읽습니다.

"로우 테크"솔루션은 기존 시스템에 상당히 방해가되지 않는 솔루션입니다.

이 솔루션이 귀하의 설정에 맞기를 희망합니다. 데이터베이스가 당신의 웹 애플리케이션에 메시지를 밀어 갖는

안부
          Sigersted

+0

나는 내 질문에 ... "작은 테이블의 타임 스탬프를 업데이트하고 캐시를 새로 고쳐야하는지 알기 위해 트리거를 설정할 수 있지만 해킹 된 것 같습니다." – Andrew

+0

아 맞습니다. 그랬지. 아직 나쁜 해결책이 아닙니다. – Sigersted

0

(MQSeries에 같은 등) 다양한 메커니즘을 통해 확실하게 행할 수있다. 유사하고 더 쉬운 것은 트리거에 의해 시작되고 캐시 유지 관리 인터페이스에 데이터를 전달하는 Java 저장 프로 시저를 작성하는 것입니다. 그러나이 두 가지 솔루션은 실제 PITA 일 수있는 많은 버전 종속성 등을 포함합니다.

또 다른 옵션은 전체 접근 방식을 재고하는 것일 수 있습니다. 응용 프로그램 측에서 캐시를 유지하는 대신 원본 테이블에서 텍스트 검색을 수행 할 수 있습니까?

하지만 내 제안은 당신 (그리고 다른 포스터)이 언급 한대로하는 것입니다.이 작업을 목적으로하는 단일 행 테이블에서 타임 스탬프를 업데이트 한 다음 웹 응용 프로그램에서 해당 테이블을 폴링하도록하십시오. 마찬가지로 변경된 행을이 작은 테이블로 푸시하고 캐시 유지 관리 프로그램을이 테이블에서 가져올 수 있습니다. 이들 중 하나는 구현하기가 매우 쉽고 신뢰성이 있어야합니다.

+0

"자바 스토어드 프로 시저를 작성하는 것이 더 쉽다"- DB2가 Java 스토어드 프로 시저를 수행 할 수 있다는 것을 알지 못했다. "원본 테이블에서 텍스트 검색"- 퍼지 논리에 대한 내 의견에 유의하십시오. 또한 우리는 MIP 당 지불하고이 일은 빠를 필요가 있습니다. "단일 행 테이블에서 타임 스탬프를 업데이트하십시오."- doable하지만 폴링 솔루션보다 EDA가 더 있습니다. "변경된 행을이 작은 테이블로 푸시하십시오."- 두 테이블을 업데이트해야하는 경우보기 싫어서 어떻게 제거해야하는지, 내 앱이 두 개있는 경우 어떻게 될까요? (나는 이것에 대해 생각했고 그것은 우리에게 많은 문제를 야기했다) – Andrew

+0

더 작은 테이블에 대해서 :이 테이블을 생성하기 위해 트리거 나 MQT를 사용할 수있다. 발견 한 행은 앱에서 처리해야합니다. 두 개의 앱이있는 경우 두 가지 중 하나를 유지하거나 행을 가져 왔을 때 업데이트하는 열을 추가하십시오. 그런 다음 둘 다 가져온 경우 비동기 프로세스로 삭제하십시오. 드물게 업데이트가 주어지면 정상적으로 작동합니다. – KenFar

관련 문제