문제

전체 텍스트 검색을 위해 사용자 정의 CRM 소프트웨어에 저장된 노트를 인덱싱하는 회사 내에서 사용할 수있는 약간의 실험 유틸리티를 연구하고 있습니다. 이 노트는 btrieve 데이터베이스 (notes.dat라는 파일)에 저장됩니다. Pervasive의 ADO.NET 제공 업체를 사용하여 데이터베이스에 연결하고 인덱싱을위한 메모를 검색 할 수 있습니다. 그러나 인덱서는 현재 각 음표를 통해 루프를하고 5 분마다 다시 표시합니다. 이것은 비효율적 인 것 같습니다.

불행히도, CRM 소프트웨어는 데이터베이스가 원격 시스템에 존재할 수 있기 때문에 메모가 변경되었다는 인덱싱 서비스에 신호를 보낼 방법이 없습니다 (개발자는 내와 통신 할 절차를 작성하지 않기 때문입니다. 네트워크를 통한 서비스는 현재 취미 프로젝트이기 때문에).

포기하기보다는이 기회를 통해 Raw Btrieve 데이터베이스에 대해 조금 더 배우고 싶습니다. 그래서 여기 내 계획이 있습니다 ...

CRM 소프트웨어는 ODBC 드라이버 대신 Btrieve API를 사용하므로 Notes.DAT 파일을 공유해야합니다 (이는 클라이언트 설치가 네트워크에서 파일 자체를 볼 수 있어야 함). 이 파일 (FileSystemWatcher와 같은 것을 사용하여)을 모니터링 한 다음 변경된 바이트를 결정하고 싶습니다. 이 정보를 사용하여 해당 위치에서 레코드를 계산하고 주요 키를 얻으려고 노력합니다. 인덱서는 Pervasive의 ADO.NET 제공 업체를 사용하여 해당 레코드 만 업데이트됩니다.

문제 (Btrieve 파일의 구조를 아직 모르거나 원시 데이터에서 기본 키를 결정하는 것이 가능하다는 사실 외에도) notes.dat에서 변경되었습니다.

나는 두 가지 버전을 차별 할 수 있지만, 그것은 어딘가에 notes.dat 사본을 저장하는 것을 의미합니다 (그리고 그것은 상당히 클 수 있으므로 전체 텍스트 색인 서비스의 이유입니다).

이것을하는 가장 효율적인 방법은 무엇입니까?

감사!

편집 : 하나의 트랜잭션에서 하나 이상의 메모를 추가, 편집 또는 삭제할 수 있으므로 가능하면 여러 개의 별도의 바이트 범위를 결정할 수 있어야합니다.

도움이 되었습니까?

해결책

당신의 경우 NOTES.DAT 파일은 an에 저장됩니다 NTFS 파티션, 그런 다음 다음 중 하나를 수행 할 수 있어야합니다.

  • 사용 USN 저널 확인하다 변화 파일에 (선호)
  • 사용 볼륨 그림자 사본 서비스 VSS (매우 빠른)를 통해 주기적 스냅 샷을 가져 와서 파일의 변경 사항을 추적하려면 다음 중 하나입니다.
    • diffing 버전 N 그리고 N-1 (아마도 구매만큼 느리지 않지만 여전히 느리게)
    • 더 깊이 탐구하고 노력하고 있습니다 diff 그만큼 $Mft 관심있는 파일에 대한 오프셋이 어떤 블록을 변경했는지 결정하려면 (훨씬 더 복잡하지만 훨씬 빠르지 만 여전히 USN 저널을 사용하는 것만 큼 빠르고 신뢰할 수 있고 간단하지 않음)

USN 저널을 사용하는 것이 선호하는 방법이어야합니다. 당신은 사용할 수 있습니다 FSUTIL USN Journal을 생성하고 잘라내는 유틸리티.

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