我正在开发一个在我们公司内部使用的小型实验实用程序,它可以索引存储在我们的自定义 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 的副本(它可能非常大,因此需要全文索引服务)。
最有效的方法是什么?
谢谢!
编辑:在一个事务中添加、编辑或删除多个注释是可能的,因此如果可能,该方法需要能够确定多个单独的字节范围。