2012-03-08 5 views
3

그래서 SQLite 사용량이 매우 많은 응용 프로그램을 작성하고 있습니다. 내 응용 프로그램에 메모리 캐싱 시스템을 써서 내 데이터 (내 개인적인 핵심 데이터 ... 본질적으로)를 정렬하고 필터링 할 수 있도록 노력하고 있습니다. 그것은 SQLite 데이터베이스에서 지속적으로 읽기 요청을하는 것보다 더 좋고/더 빠른 옵션이라고 생각하기 때문에이 작업을 수행하고 있습니다. 또한 대부분의 필드/열은 검색 가능/정렬 가능하며 각각의 인덱스를 설정하는 것이 이상적이지 않습니다. 그러나 나는 확실하지 않다. 나는 SQLite 데이터베이스가 메모리에 캐시되어 있다는 것을 알고 있지만 어느 정도까지 또는 얼마나 많은 이점이 있는지 알지 못합니다. 내 자신의 캐싱 시스템을 구현하는 것은 복잡 할 것이고 특히 메모리에 각 테이블을 완전히로드하여 정렬/필터를 수행 할 때마다 내 메모리 공간이 추가 될 것입니다. 내 앱의 성능 향상에 도움이된다면 기꺼이 해보 겠지만 그렇게 할 수 있을까요? SQLite 캐싱만으로도 충분히 의존 할 수 있습니까? 그렇지 않으면 테이블이 커지기 시작합니다 (10,000+ 행). 나는 누군가가 SQLite에 대해 충분한 경험을 가지고 있는지를 묻고있는 것 같아.SQLite 캐싱 대 응용 프로그램 캐싱

누구나 묻기 전에 : 아니오 코어 데이터를 사용할 수 없습니다. 핵심 데이터는 내 응용 프로그램에서 사용하기에 충분히 유연하지 않습니다.

+0

아무도 없습니까? 음, 내 자신의 캐시를 만들어 보겠습니다. 어쨌든 재미있는 프로젝트가 될 것이고 적어도 나는 무슨 일이 일어날 지 알게 될 것입니다. –

+0

sqlite는'pragma locking_mode = exclusive' IIRC를 사용하면 훨씬 빨라질 수 있습니다. –

답변

1

좋아, 여기 내가 생각한 바가있다. 선택은 요구 사항에 크게 달려있다. 나는 (가능한 한 많은) SQLite 캐시를 제거하고, 필자가 필요로하는 것을로드하고, 내 자신의 루틴을 사용하여 정렬/필터링을 종료했습니다. 이것은 나를 위해 현저하게 잘 작동합니다. 하지만이 방법을 구현하면 많은 상황에서 작동하지 않는다는 것을 깨달았습니다. 특히 DB 크기가 가능한 한 작게 설정되었는지 확인하기 위해 많은 노력을 기울였습니다. 기본적으로 단순/작은 텍스트와 숫자 만 저장합니다. 다른 모든 것은 외부 파일에 대한 참조입니다. 이로 인해 데이터베이스는 데이터베이스를 적게 사용하고 인덱싱 서비스는 더 적게 사용하게되어 정보를 메모리에로드하고 정렬/필터링하는 데 적합합니다.

그래서 답변은 데이터베이스에 많이 달려 있습니다. 잠재적으로 많은 메모리를 차지할 수있는 큰 필드를 저장하는 경우 SQLite가 캐시를 처리하도록하는 것이 가장 좋습니다. 반면에 필드가 작다는 것을 안다면 SQLite 캐시는 메모리를 부풀리고 데이터 정렬/필터링을위한 데이터베이스로의 왕복은 대기 시간 만 증가시킵니다. 대신 정렬 작업/필터링 작업을하는 것이 더 낫지 만, 그 작업이 많은 것으로 인정할 것입니다. 하지만 결국 그것은 내 앱을 DB에 라운드 트립하는 것보다 훨씬 빠르게 만들었습니다.