Я работаю над небольшой экспериментальной утилитой для использования в нашей компании, которая индексирует заметки, хранящиеся в нашем специальном программном обеспечении 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 (и она может быть довольно большой, отсюда и причина службы полнотекстового индексирования).
Какой самый эффективный способ сделать это?
Спасибо!
РЕДАКТИРОВАТЬ: возможно добавление, редактирование или удаление более одной заметки в одной транзакции, поэтому, если возможно, метод должен иметь возможность определять несколько отдельных диапазонов байтов.