2014-03-31 2 views
1

C API를 사용하여 여러 환경에 공유 캐시를 구성하는 방법은 무엇입니까? 자바 에디션과 같습니다. http://docs.oracle.com/cd/E17277_02/html/GettingStartedGuide/env.html#multienvsharedcacheC API를 사용하여 여러 환경에 공유 캐시를 구성하는 방법은 무엇입니까?

데이터베이스를 10 만 개 이상 열어보고 싶습니다. 그러나 데이터베이스의 수가 증가하면 db -> open 작업이 매우 느려집니다. 거의 100,000 개의 데이터베이스에 2 시간이 소요됩니다. 그래서이 데이터베이스를 여러 환경 (예 : 5 환경)에 배포하려고합니다. 그리고 메모리 사용의 효율성을 높이기 위해 env 사이에서 캐시를 공유하려고합니다.

답변

0

C API를 사용하여이 작업을 수행 할 수 없다고 확신합니다. 그러나 몇 가지 대체 솔루션을 고려하십시오.

  1. 각 환경에 비교적 작은 캐시를 사용하십시오. 각 환경의 캐시에는 읽기 용 작업 세트를 보유 할만큼 충분한 메모리가 있어야합니다.
  2. 동일한 환경의 모든 데이터베이스를 엽니 다. 각각의 데이터베이스를 독립적으로 복구해야하는 경우에는 작동하지 않습니다.

시스템이 스왑 중이므로 모든 데이터베이스를 열 때 너무 오래 걸릴 가능성이 있습니다. 그러나 환경 당 1MB 캐시조차도 100GiB RAM이 필요합니다. 환경 당 96KiB 이하의 캐시 (10GiB 미만)로 벗어날 수 있습니다. 16KiB를 사용해보십시오!

성능에 문제가있는 것처럼 보이지는 않습니다. 당신의 OS는 이미 디스크 상에있는 데이터를 캐싱 할 때 꽤 잘 작동합니다.

동일한 환경에서 모든 데이터베이스를 열 수 있다면 더 좋습니다.

+0

나는 당신이 16KiB가 데이터베이스 캐시를 의미한다고 말했다고 생각한다. 내가 hava 환경에서 캐시 크기를 5GiB로 설정합니다. Berkeley DB 환경에서 열린 데이터베이스는 환경에 지정된 캐시를 사용하기 때문에 환경 내에서 작성된 데이터베이스에서 캐시 크기를 설정하려고하면 오류가 발생합니다. – roczhang

+0

글쎄, 아니 ... 당신이 데이터베이스 당 하나의 환경을 사용하는 것처럼 보였으므로 각 환경에서 16KiB 캐시를 의미합니다. 분명히, 100,000 개의 환경에서 각각 5GiB 캐시를 가질 수 없습니다! –

관련 문제