تحديد نطاق البداية والنهاية للبايتات التي تم تغييرها في الملف

StackOverflow https://stackoverflow.com/questions/632317

سؤال

أنا أعمل على أداة تجريبية صغيرة لاستخدامها داخل شركتنا والتي تعمل على فهرسة الملاحظات المخزنة في برنامج CRM المخصص لدينا للبحث عن النص الكامل.يتم تخزين هذه الملاحظات في قاعدة بيانات Btrieve (ملف يسمى NOTES.DAT).من الممكن الاتصال بقاعدة البيانات واسترداد الملاحظات للفهرسة باستخدام موفر ADO.NET الخاص بـ Pervasive.ومع ذلك، يقوم المفهرس حاليًا بتكرار كل ملاحظة وإعادة فهرستها كل 5 دقائق.وهذا يبدو غير فعال إلى حد كبير.

لسوء الحظ، لا توجد طريقة لبرنامج CRM الخاص بنا لإرسال إشارة إلى خدمة الفهرسة بأن الملاحظة قد تم تغييرها، لأنه من الممكن أن تكون قاعدة البيانات موجودة على جهاز بعيد (ولن يقوم المطورون بكتابة إجراء للتواصل مع الخدمة عبر الشبكة، نظرًا لأنه مجرد مشروع هواية في الوقت الحالي).

بدلاً من الاستسلام، أود أن أغتنم هذه الفرصة لمعرفة المزيد عن قواعد بيانات Btrieve الأولية.إذن، ها هي خطتي...

يجب مشاركة ملف NOTES.DAT، نظرًا لأن برنامج CRM الخاص بنا يستخدم Btrieve API بدلاً من برنامج تشغيل ODBC (مما يعني أن عمليات تثبيت العميل يجب أن تكون قادرة على رؤية الملف نفسه على الشبكة).أرغب في مراقبة هذا الملف (باستخدام شيء مثل FileSystemWatcher؟) ثم تحديد وحدات البايت التي تم تغييرها.باستخدام هذه المعلومات، سأحاول حساب السجل في هذا الموضع والحصول على مفتاحه الأساسي.ثم سيقوم المفهرس بتحديث هذا السجل فقط باستخدام موفر ADO.NET الخاص بـ Pervasive.

المشكلة (إلى جانب حقيقة أنني لا أعرف تمامًا بنية ملفات Btrieve حتى الآن أو إذا كان تحديد المفتاح الأساسي من البيانات الأولية ممكنًا) هي أنني لا أعرف كيفية تحديد نطاق البداية والنهاية للبايتات التي تم تغييرها في Notes.DAT.

يمكنني التمييز بين نسختين، ولكن هذا يعني تخزين نسخة من NOTES.DAT في مكان ما (ويمكن أن تكون كبيرة جدًا، ومن هنا السبب وراء خدمة فهرسة النص الكامل).

ما هي الطريقة الأكثر فعالية للقيام بذلك؟

شكرًا!

يحرر:من الممكن إضافة أو تحرير أو حذف أكثر من ملاحظة واحدة في معاملة واحدة، لذا، إذا أمكن، يجب أن تكون الطريقة قادرة على تحديد نطاقات بايت منفصلة متعددة.

هل كانت مفيدة؟

المحلول

إذا كان لديك NOTES.DAT يتم تخزين الملف على قسم NTFS, ، فيجب أن تكون قادرًا على تنفيذ أحد الإجراءات التالية:

  • استخدم ال مجلة USN لتحديد التغييرات إلى ملفك (مفضل)
  • استخدم ال خدمة نسخ الظل الحجمي لتتبع التغييرات في ملفك عن طريق أخذ لقطات دورية عبر VSS (سريع جدًا)، ثم إما:
    • diffإصدارات جي N و N-1 (ربما ليس بطيئًا مثل إعادة الفهرسة، ولكنه لا يزال بطيئًا)، أو
    • التعمق أكثر ومحاولة القيام به diff ال $Mft لتحديد الكتل التي تم تغييرها وفي أي إزاحة للملف (الملفات) محل الاهتمام (أكثر تعقيدًا، ولكنها أيضًا أسرع بكثير - ولكنها لا تزال غير سريعة وموثوقة وبسيطة مثل استخدام مجلة USN)

يجب أن يكون استخدام مجلة USN هو الطريقة المفضلة لديك.يمكنك استخدام ال FSUTIL الأداة المساعدة لإنشاء واقتطاع مجلة USN.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top