كيفية موثوق التعامل مع الملفات التي تم تحميلها بشكل دوري من قبل وكيل الخارجية?

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

سؤال

إنه سيناريو شائع جدا:بعض هذه العملية يريد إسقاط ملف على ملقم كل 30 دقيقة أو نحو ذلك.بسيطة, صحيح ؟ حسنا, يمكنني التفكير في مجموعة من الطرق وهذا يمكن أن تذهب الخطأ.

على سبيل المثال معالجة ملف قد تأخذ أكثر أو أقل من 30 دقيقة ، لذلك فمن الممكن أن تصل قبل أنا فعلت مع سابقتها.أنا لا أريد المصدر نظام الكتابة فوق الملف الذي ما زلت المعالجة.

من ناحية أخرى, الملفات الكبيرة ، لذلك يستغرق بضع دقائق إلى الانتهاء من تحميلها.لا تريد أن تبدأ معالجة جزئية الملف.الملفات فقط tranferred مع FTP أو sftp (أفضله) ، حتى على مستوى نظام التشغيل قفل ليس خيارا.

أخيرا, أنا بحاجة للحفاظ على الملفات حول لفترة من الوقت, في حال كنت تحتاج إلى يدويا من فحص واحد منهم (للتصحيح) أو معالجة واحدة.

لقد رأيت الكثير من المخصص نهج خلط تحميل الملفات حولها ، تبديل أسماء الملفات باستخدام datestamps, لمس "مؤشر" ملفات للمساعدة في التزامن ، وهلم جرا.ما لم نر حتى الآن هو شامل "خوارزمية" معالجة ملفات عناوين التوافق والاتساق واكتمالها.

لذا أود الاستفادة من حكمة الحشود هنا.وقد أي شخص ينظر حقا الرصاص وسيلة لتزييف دفعة ملفات البيانات حتى انهم لم تتم معالجتها في وقت مبكر جدا ، ابدأ الكتابة قبل القيام به ، وأمان تبقى بعد معالجة ؟

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

المحلول

المفتاح هو أن تفعل الأولي شعوذة في إرسال الغاية.كل مرسل يحتاج إلى القيام به هو:

  1. تخزين الملف مع ملف فريد.
  2. بمجرد أن الملف قد تم إرسالها أو نقلها إلى دليل فرعي يسمى مثلا completed.

على افتراض أن هناك فقط واحدة المتلقي في عملية المتلقي يحتاج إلى القيام به هو:

  1. دوري مسح completed الدليل عن أية ملفات.
  2. حالما يظهر ملف في completed, الانتقال إلى دليل فرعي يسمى مثلا processed, و بدء العمل على ذلك من هناك.
  3. اختياريا حذفها عند الانتهاء.

على أي عاقل الملفات, ملف التحركات الذرية شريطة تحدث داخل نفس الملفات/المجلد.حتى لا تكون هناك شروط السباق.

أجهزة الاستقبال متعددة

إن المعالجة يمكن أن يستغرق وقتا أطول من الفترة بين الملفات التي يتم تسليمها ، عليك بناء تراكم إلا إذا كان لديك متعددة المتلقي العمليات.حتى, كيفية التعامل مع متعددة-استقبال الحالة ؟

بسيطة:كل عملية استقبال يعمل بالضبط كما كان من قبل.كما أن محاولة نقل ملف إلى processed قبل العمل على ذلك:حقيقة نفس الملفات ملف التحركات الذرية ، يعني أنه حتى إذا كان العديد من أجهزة الاستقبال نرى نفس الملف في completed ومحاولة نقل ذلك واحد فقط سوف تنجح.كل ما عليك القيام به هو التأكد من انك تحقق قيمة الإرجاع rename(), أو أيا كان نظام التشغيل دعوة تستخدمها لتنفيذ هذه الخطوة إلا المضي قدما في معالجة إذا نجحت.إذا فشل التحرك بعض المتلقي ، لذا عودي و مسح completed الدليل مرة أخرى.

نصائح أخرى

وإذا كان نظام التشغيل يدعم ذلك، استخدم نظام الملفات السنانير لاعتراض عمليات الملفات تفتح وتغلق. شيء من هذا القبيل Dazuko . أنظمة التشغيل الأخرى قد تتيح لك معرفة حول ملف العمليات في anoter الطريقة، على سبيل المثال نوفيل المفتوحة إنتربرايز سيرفر يتيح لك تحديد العهود، و <لأ href = "http://www.novell.com/coolsolutions/tools/18992.html" يختلط = "نوفولو noreferrer"> قراءة قائمة الملفات التي تم تعديلها خلال عصر.

وأدرك تماما أن في لينكس، يمكنك استخدام الفرعي inotify، أو المرافق العامة من حزمة أدوات inotify

ونقل الملفات هي واحدة من كلاسيكيات نظام التكامل. انصح لك للحصول على أنماط المشاريع التكامل كتاب لبناء الإجابة الخاصة بك على هذه الأسئلة - ل حد ما، والجواب يعتمد على التقنيات والمنصات التي تستخدم لتنفيذ نقطة النهاية ولنقل الملفات. انها مجموعة شاملة تماما من أنماط قابلة للتطبيق، وإلى حد ما مكتوب بشكل جيد.

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