2012-12-13 4 views
0

JVM에서 캐시를 보유하기 위해 JCS를 활용하는 응용 프로그램을 유지 관리합니다 (JVM1). 이 데이터는 JVM이 시작/다시 시작될 때 처음으로 데이터베이스에서로드됩니다.JCS - 데이터베이스에서 캐시의 동적 업데이트

그러나 데이터베이스는 다른 JVM (JVM2)에서 액세스 할 수 있으며 데이터베이스에 데이터를 추가하는 데 도움이됩니다.

이 추가/새로 추가 된 레코드를 캐시에로드하려면 데이터베이스에 추가 할 때마다 JVM1을 다시 시작해야합니다.

JVM1 (빈번한 db 폴링 대신)에 대해 캐시를 새로 고치거나로드 할 수있는 방법이 있습니까?

감사합니다, 자야 크리슈나

답변

0

는 단순히 JVM1 먼저 확인해야 할 수 없습니다 메모리 캐시에 다음 항목이 메모리 캐시에 존재하지 않는 경우, 데이터베이스 캐시를 확인?

그러나 존재하는 모든 특정 유형의 항목을 나열해야하고 데이터베이스에 액세스하지 않으려는 경우. 그런 다음 JVM1이 데이터 베이 스에 새 항목이 있음을 알기 위해 JVM2는 JVM1에 데이터베이스에 새로운 항목이 있음을 알리는 네트워크 메시지를 보내야합니다. 또는 2) 새로운 데이터가 삽입 될 때 발생하는 데이터베이스 트리거가있을 수 있으며 JVM1에 네트워크 메시지를 보냅니다. (그러나 데이터베이스을 응용 프로그램 서버에 보내면 오히려 이상하게 느껴질 것입니다.) - 나는 이러한 접근법이 다소 복잡하다고 생각합니다.

최근에 데이터베이스에 삽입 한 항목의 ID를 기록하는 새로운 항목 ID 테이블을 고려한 적이 있습니까? 데이터베이스 트리거에 의해 업데이트되거나 데이터베이스에 쓸 때 JVM1과 2에 의해 업데이트 될 수 있습니다. 그런 다음 JVM1은 초당 한 번씩이 단일 테이블을 폴링하여 새 ID 목록을 얻은 다음 데이터베이스에서 새 항목을로드 할 수 있습니다.

마지막으로 분산 캐시를 고려 했습니까? 따라서 JVM1과 2는 동일한 캐시를 공유하며 JVM1과 2는 데이터베이스에 데이터를 삽입 할 때이 캐시에 항목을 씁니다. (이 접근법은 JVM1과 2간에 네트워크 메시지를 전송하는 것과 다소 유사하지만 분산 캐시 시스템은 메시지 자체를 전송하므로 새로운 코드를 작성할 필요가 없습니다.)

+0

해답을 제공해 주셔서 감사합니다. 사실 나는 트리거 부분을 보았고 우리가하고 싶은 것은 데이터베이스 상호 작용이 없어야했기 때문에 JVM2에서 데이터베이스에 대한 히트 수를 제어하지 않으므로 UI ​​트랜잭션 수 (db 업데이트). 그러나 우리는 자바 스토어드 프로 시저를 트리거와 함께 생성하여 자바 저장 프로 시저가 JVM2의 캐시를 제어 (항목 추가/삭제) 할 수 있도록 약간 다른 방법을 시도했습니다. –