2016-07-07 8 views
0

우리는 sqlite DB의 암호화를 처리하기 위해 FMDB sqlcipher 래퍼를 사용하고 있습니다. 하나의 FMDataBaseQueue를 사용하여 여러 스레드에서 읽고 쓰는 것을 처리합니다. sqlcipher를 도입 한 이래로 애플리케이션 성능이 크게 향상되었습니다. 모든 거래에서 우리는 열쇠를 설정하고 있습니다.FMDB + sqlcipher 성능 문제

self.dbQueue inTransaction:^(FMDatabase *db, BOOL *rollback){ 
    [db setKey:"dummykey"]; 
    //Do Some DataBase Updates or Queries 

} 

그래서, 우리는 여러 컨트롤러에서 사용되어왔다 년부터 추상적 인 모든 방법을했다. 이 문제를 어떻게 해결할 수 있습니까? 그리고 때때로 우리는이 메인 큐를 수행해야만합니다 (대부분의 경우 글로벌 큐에서 처리합니다). 일부 처리가 완료 될 때까지 대기합니다. DB 암호화는 비용이 많이 드는 작업이므로 sqlite 문의 실행 성능을 어떻게 향상시킬 수 있습니까? DBConnection은 앱의 수명주기 동안 열립니다. 내가 DB와 상호 작용할 때마다 [db setKey:"dummykey"];을 사용해야합니까?

답변

0

응용 프로그램 사용에 비해 SQLCipher performance guidance을 검토하십시오.

+0

문서에서는 키 유도가 매우 비싸므로 연결을 반복해서 열고 닫지 마십시오. 데이터베이스 연결을 자주 열거 나 닫으면 (예 : 모든 쿼리에 대해) 성능 문제가 발생하는 매우 일반적인 원인입니다. " 우리는 FMDBDataBaseQueue의 단일 인스턴스를 갖는 싱글 톤 클래스를 가지며 그 초기화 중에 연결이 열립니다. 즉, 키를 한 번만 설정하고 모든 DB 상호 작용을 반복하지 말아야한다는 의미입니까? – sac

+1

데이터베이스 연결을 열 때 키를 한 번만 입력하면됩니다. –