저는 Berkeley Db를 사용하는 응용 프로그램을 개발 중입니다. ACI (ACID는 아님)와 일치해야하며 성능이 매우 중요합니다. 그 이상으로 퍼포먼스가 제가 버클리 Db를 선택한 이유였습니다. 하지만 Berkeley Db는 로깅 때문에 병목 현상이있는 것 같습니다. 문제는 더 많은 데이터가 데이터베이스에 저장 될수록 더 오래 저장 될 값입니다. 나는__db.00x 파일에 기록/기록하지 않고 Berkeley Db 트랜잭션을 사용하는 방법?
envp->set_flags(envp, DB_TXN_NOSYNC, 1);
을 확인하고 플래그와 환경 엽니 다
DB_CREATE | // Create the environment if it does not exist
DB_INIT_TXN | // Initialize the transactional subsystem.
DB_INIT_MPOOL | // Initialize the memory pool (in-memory cache)
DB_INIT_LOCK | // Initialize the locking subsystem
DB_THREAD;
을하지만 여전히 디스크에 로깅하고,의 performace는 데이터 양이 증가함에 따라, 매우 가난한 가져오고 값이되는 내 생각, 더 이상 얻을 저장, 시간의 대다수가 로그 파일로 저장에 소요됩니다 -로드 평균은
load average: 19.65, 19.12, 17.00
내가에서 동기화 모든 로그를 필요로하지 않는 것입니다 런타임 - ACI는 필요하지만 ACID는 필요하지 않습니다.
로그 오프 켜거나 디스크에 쓰기 로그를 비활성화하는 방법이 있나요?
편집 : 누구도 대답하지 않았으므로 많은 검색을 해본 결과 way이 로깅을 해제했지만 불행히도 도움이되지 않았습니다 - 환경은 여전히 __db.00x 파일에 많은 것을 씁니다. 왜 그리고 어떻게 메모리에 저장 하는지를 안다.