2011-10-30 3 views
2

내 응용 프로그램은 sqlite를 백 엔드로 사용하여 메모리 내장 데이터베이스 (: memory :)를 만듭니다.sqlite in-memory db 및 multithreading

내 마스터 스레드가 메모리 내 데이터베이스에 연결을 만들고이 연결을 여러 스레드가 공유하도록합니다. 이것이 가능한가? SQLite 3.7.8은 지금 다운로드 할 수 있습니다.

the shared cached 가능한 방법은 무엇입니까?

+0

나는'에 대한 모든 연결을하기 때문에 그렇게 생각하지 않아요 : 메모리 :'메모리에 독립적 인 DB를 생성 ... 참조 http://www.sqlite.org/inmemorydb .html 중에서 – Yahia

+0

어쩌면 [이 질문]의 중복 [1] [1] : http://stackoverflow.com/questions/3267077/can-i-achieve-scalable-multi-threaded-access- 메모리에 sqlite 데이터베이스 –

+0

@ NicolasModrzyk 귀하의 링크에 대한 답변이 없습니다. 그러나 그것은 실제로 같은 질문입니다. – cateof

답변

3

serialized mode을 사용하여 메모리 내장 데이터베이스 연결을 여는 경우 연결이 여러 스레드간에 공유 될 수 있습니다.

이 작업을 수행하려면 SQLite가 threadsafe으로 컴파일되어야합니다. 이것이 기본값입니다.

응용 프로그램에 따라 디스크 기반 데이터베이스에 대한 큰 공유 캐시 또는 많은 판독기 스레드가있는 경우 WAL 모드로 성능을 향상시킬 수 있습니다.

예 :

sqlite3 *pDb 

if (sqlite3_open_v2(":memory:", &pDb, SQLITE_OPEN_FULLMUTEX, NULL) == SQLITE_OK) { 

    start_thread1_with_db_handle(pDb); 

    start_thread2_with_db_handle(pDb); 

    // etc. 
} 
+0

소스 코드에서 사용할 수있는 예제가 있습니까? – cateof

+0

필요한 것을 모릅니다. 답변에 추가 된 예. 감사합니다. –

+0

. 당신의 대답은 제가 찾고있는 것입니다. – cateof