我正在开发一个在我们公司内部使用的小实验实用程序,该实用程序可以对存储在我们的自定义 CRM 软件中的注释进行索引,以进行全文搜索。这些注释存储在 Btrieve 数据库中(名为 NOTES.DAT 的文件)。可以使用 Pervasive 的 ADO.NET 提供程序连接到数据库并检索注释以建立索引。但是,索引器当前会循环遍历每个注释,并每 5 分钟重新索引一次。这看起来效率极低。

不幸的是,我们的 CRM 软件无法向索引服务发出注释已更改的信号,因为数据库可能存在于远程计算机上(并且开发人员不会编写程序来与我的计算机进行通信)。通过网络提供服务,因为目前这只是一个业余爱好项目)。

我不想放弃,而是想借此机会更多地了解原始 Btrieve 数据库。所以,这是我的计划......

NOTES.DAT 文件必须共享,因为我们的 CRM 软件使用 Btrieve API 而不是 ODBC 驱动程序(这意味着客户端安装必须能够在网络上看到该文件本身)。我想监视这个文件(使用类似 FileSystemWatcher 的东西?),然后确定更改的字节。使用该信息,我将尝试计算该位置的记录并获取其主键。然后索引器将使用 Pervasive 的 ADO.NET 提供程序仅更新该记录。

问题(除了我还不太了解 Btrieve 文件的结构或者是否可以从原始数据确定主键这一事实之外)是我不知道如何确定字节的开始和结束范围在NOTES.DAT 中进行了更改。

我可以比较两个版本,但这意味着在某个地方存储一份 Notes.DAT 的副本(它可能非常大,因此需要全文索引服务)。

最有效的方法是什么?

谢谢!

编辑:在一笔事务中可能会添加、编辑或删除多个注释,因此如果可能,该方法需要能够确定多个单独的字节范围。

有帮助吗?

解决方案

如果你的 NOTES.DAT 文件存储在 NTFS分区, ,那么您应该能够执行以下操作之一:

  • 使用 美国海军杂志 识别 变化 到您的文件(首选)
  • 使用 卷影复制服务 通过 VSS 定期拍摄快照(非常快)来跟踪文件的更改,然后:
    • diff荷兰国际集团版本 NN-1 (可能不像重建索引那么慢,但仍然很慢),或者
    • 深入研究并尝试做 diff$Mft 确定哪些块在感兴趣的文件的哪些偏移量处发生了变化(更复杂,但也更快 - 但仍然不如使用 USN 日志那么快速、可靠和简单)

使用 USN 期刊应该是您的首选方法。您可以使用 FSUTIL 用于创建和截断 USN 日志的实用程序。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top