문제

내 앱은 약 1000개 개체의 상태를 추적합니다.이러한 객체는 특별한 순서 없이 영구 저장소에서 읽고 쓰여집니다(직렬화됨).

현재 앱은 레지스트리를 사용하여 각 개체의 상태를 저장합니다.이것은 좋은 이유는 다음과 같습니다.

  • 간단하다

  • 매우 빠릅니다

  • 더 큰 엔터티를 읽을 필요 없이 개별 객체의 상태를 읽고 쓸 수 있습니다(대형 XML 파일에서 조각을 가져오는 등).

  • 개별 항목을 쉽게 조작할 수 있는 괜찮은 편집기(RegEdit)가 있습니다.

그렇게 말하면 더 좋은 방법이 있는지 궁금합니다.SQLite는 가능성이 있는 것처럼 보이지만 레지스트리와 동일한 수준의 다중 판독기/다중 기록기가 없으며 기존 항목을 편집할 수 있는 간단한 방법도 없습니다.

더 좋은 제안이 있나요?플랫 파일 묶음?

도움이 되었습니까?

해결책

SQLITE를 실험하기 시작하면 "상자 밖으로"원하는만큼 빠르지 않을 수도 있지만 확립 된 최적화 팁을 적용하여 훨씬 빠르게 만들 수 있다는 것을 알아야합니다.

sqlite 최적화

데이터의 크기와 사용 가능한 RAM의 양에 따라 SQLITE가 디스크에 쓰기보다는 올인 메모리 데이터베이스를 사용하도록 설정함으로써 최고의 성능 이득 중 하나가 발생합니다.

메모리 인 데이터베이스의 경우 파일 이름 인수로 NULL을 전달하십시오. sqlite3_open 그리고 temp_store가 적절하게 정의되어 있는지 확인하십시오

반면에, SQLITE에 하드 디스크를 사용하라고 말하면, 현재 Regedit 사용과 비슷한 이점을 얻을 수 있도록 프로그램의 데이터를 "즉석"로 조작 할 수 있습니다.

SQLITE로 현재 Regedit 기술을 시뮬레이션 할 수있는 방법은 SQLITE 명령 줄 도구를 사용하여 온 디스크 데이터베이스에 연결하는 것입니다. 메인 프로그램이 실행되는 동안 명령 줄에서 SQL 데이터에 대한 업데이트 문을 실행할 수 있습니다 (및/또는 중단 모드에서 일시 중지 된 상태).

다른 팁

'다중 독자/다중 작가'가 의미하는 바는 스레드가 상점에 동시에 쓰여지는 경우 SQLite는 스레드 사프입니다 (동시 선택을 가질 수 있고 동시 쓰기는 투명하게 처리됩니다). [FAQ [1]] 및 'ThreadSafe'에 대한 Grep을 참조하십시오.

[1]: http://www.sqlite.org/faq.html/ 자주하는 질문

요즘 어떤 제정신 이이 길을 갈 것이라고 의심하지만, 당신이 묘사 한 것 중 일부는 창문으로 할 수 있습니다. 구조화/화합물 저장. 나는 당신이 묻는 이후로 이것을 언급합니다 - 이것은이 작업을 수행하는 공식적인 창문이었습니다.

이것이 DOC 파일을 구성하는 방식입니다 (새로운 DOCX 형식은 아닙니다). MSDN에서 그것은 정말로 복잡해 보일 것이지만 나는 그것을 사용했지만 그것은 아닙니다. 가장 나쁜 Win32의 API.

  • 그것은이다 ~ 아니다 단순한
  • 빠릅니다 추측 레지스트리보다 빠릅니다.
  • 개별 객체의 상태는 더 큰 엔티티를 읽지 않고도 읽거나 쓸 수 있습니다.
  • 괜찮은 편집기는 없지만 실제 기본 사항이 있습니다 (VC ++ 6.0은 도구 아래에 "Docfile Viewer"가있었습니다. 약간의 온라인.
  • 레지스트리 키 대신 파일을 얻습니다.
  • 당신은 구식 Windows 개발자 Geek-Cred를 얻습니다.

기타 임의의 생각 :XML은 (임의의 액세스 문제에도 불구하고) 갈 길이라고 생각합니다. 도대체 INI 파일이 작동 할 수 있습니다. 레지스트리는 필요한 경우 매우 훌륭한 곡물 보안을 제공합니다. 파일을 사용하는 클레임이 더 좋을 때 사람들은 이것을 잊어 버리는 것 같습니다. 임베디드 DB는 과잉처럼 보입니다 만약에 나는 당신이하고있는 일을 이해하고 있습니다.

각 변경 이벤트마다 개체를 유지해야 합니까, 아니면 메모리에만 유지하고 종료 시 저장해야 합니까?그렇다면 앱이 오랫동안 실행되고 해당 상태를 다른 프로그램과 공유하지 않는다고 가정하여 앱을 로드하고 마지막에 직렬화하면 메모리 내에서 승자가 될 것입니다.

고정된 크기 구조를 가지고 있다면 메모리 매핑 파일을 사용하여 거기에서 메모리를 할당하는 것을 고려할 수 있습니까?

당신이하는 유일한 일이 개별 객체 (멋진 쿼리 없음) 직렬화/사형화하는 것만 큼 BTREE 데이터베이스를 사용하는 것입니다. 버클리 DB. 키에 의해 데이터 청크를 저장하고 검색하는 데 매우 빠릅니다 (객체에 키로 사용할 수있는 ID가 있다고 가정합니다). 여러 프로세스에 의한 액세스가 지원됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top