ما هو الأسلوب الأفضل في التسجيل - الملفات أم قاعدة البيانات؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

حسنًا، هذا هو السيناريو.لدي أداة تعمل على معالجة عدد كبير من السجلات وإدخال المعلومات في قاعدة البيانات وفقًا لذلك.

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

هل يجب تحويل هذا السجل إلى قاعدة بيانات موجودة على خادم آخر؟الاعتبارات:

  1. العيب الواضح للخيوط المتعددة التي تكتب إلى نفس ملف السجل هو أن رسائل السجل يتم خلطها فيما بينها.في قاعدة البيانات، يمكن تجميعها حسب معرف الدفعة.
  2. الأداء - ما الذي قد يؤدي إلى إبطاء معالجة الدُفعات أكثر؟الكتابة إلى ملف محلي أو إرسال بيانات السجل إلى قاعدة بيانات على خادم آخر على نفس الشبكة.من الناحية النظرية، ملف السجل أسرع، ولكن هل هناك مشكلة هنا؟

هل هناك أي تحسينات يمكن القيام بها على أي من النهجين؟

شكرًا.

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

المحلول

أنا ثاني الإجابات الأخرى هنا ، يعتمد على ما تفعله بالبيانات.

لدينا سيناريوهين هنا:

  1. تتم غالبية عمليات التسجيل إلى قاعدة بيانات نظرًا لأن المستخدمين الإداريين للمنتجات التي نبنيها يجب أن يكونوا قادرين على عرضها في تطبيقهم الصغير الجميل مع جميع الميزات والميزات.

  2. نقوم بتسجيل جميع بيانات التشخيص ومعلومات التصحيح الخاصة بنا في الملف.ليست لدينا حاجة إلى "تجميله" حقًا وTBH، بل إننا لا نحتاج إليه في كثير من الأحيان، لذلك نقوم فقط بتسجيل الدخول والأرشفة في معظم الأحيان.

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

نصائح أخرى

السؤال المثير للاهتمام، إذا قررت تسجيل الدخول إلى قاعدة البيانات، أين تسجل أخطاء اتصال قاعدة البيانات؟

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

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

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

علاوة على ذلك، هل لديك أي احتياجات محددة لتسجيل الدخول إلى قاعدة البيانات؟إذا كان كل ما تحتاجه هو "grep" فلا أعتقد أنك ستكسب الكثير من خلال تسجيل الدخول إلى قاعدة البيانات.

لست متأكدًا مما إذا كان ذلك مفيدًا، ولكن هناك أيضًا أداة مساعدة تسمى مايكروسوفت LogParser التي من المفترض أن تستخدمها لتحليل ملفات السجل النصية واستخدامها كما لو كانت قاعدة بيانات.من الموقع:

Log Acarer هي أداة قوية ومتعددة الاستخدامات توفر الوصول الشامل للاستعلام إلى البيانات المستندة إلى النص مثل ملفات السجل وملفات XML وملفات CSV ، بالإضافة إلى مصادر البيانات الرئيسية على نظام تشغيل Windows® مثل سجل الأحداث ، السجل ، نظام الملفات ، و Active Directory®.تخبر Log Parser ما هي المعلومات التي تحتاجها وكيف تريد معالجتها.يمكن أن تكون نتائج استعلامك مخصصة في الإخراج القائم على النص ، أو يمكن استمرارها لأهداف تخصص مثل SQL أو Syslog أو الرسم البياني.تم تصميم معظم البرامج لإنجاز عدد محدود من المهام المحددة.محلل السجل مختلف ...لا يقتصر عدد الطرق التي يمكن استخدامها إلا باحتياجات المستخدم وخياله.العالم هو قاعدة البيانات الخاصة بك مع محلل السجل.

لم أستخدم البرنامج بنفسي، لكنه يبدو مثيرًا للاهتمام جدًا!

أو ماذا عن تسجيل الدخول إلى قائمة الانتظار؟وبهذه الطريقة يمكنك تبديل أدوات الاقتراع عندما ترغب في تسجيل الدخول إلى أشياء مختلفة.فهو يجعل الأمور مثل تمرير ملفات السجل وأرشفتها أمرًا سهلاً للغاية.إنه أمر رائع أيضًا لأنه يمكنك إضافة استطلاعات الرأي التي تقوم بتسجيل الدخول إلى أشياء مختلفة، على سبيل المثال:

  • أداة استطلاع تبحث عن رسائل الخطأ وتنشرها على حساب FogBugz الخاص بك
  • مستقصي يبحث عن انتهاكات الوصول ("x حاول الوصول إلى /foo/y/bar.html") إلى ملف "محاولات القرصنة"
  • إلخ.

قاعدة البيانات - منذ أن ذكرت عدة مواضيع.المزامنة وكذلك الاسترجاع الذي تمت تصفيته هي أسباب إجابتي.
تحقق مما إذا كانت لديك مشكلة في الأداء قبل أن تقرر التبديل إلى الملفات
"كنوث:التحسين المبكر هو أصل كل الشرور" لم أتعمق أكثر في هذا الكتاب...:)

هناك طرق يمكنك من خلالها التغلب على القيود المفروضة على تسجيل الملفات.

يمكنك دائمًا بدء كل إدخال سجل بمعرف سلسلة رسائل من نوع ما، واستخراج معرفات سلسلة المحادثات الفردية.أو ملف سجل مختلف لكل موضوع.

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

ماذا عن تسجيل الدخول إلى ملف قاعدة البيانات، على سبيل المثال قاعدة بيانات SQLite؟أعتقد أنه يمكنه التعامل مع عمليات الكتابة متعددة الخيوط - على الرغم من أن ذلك قد يكون له أيضًا نفقات أداء خاصة به.

أعتقد أن الأمر يعتمد بشكل كبير على ما تفعله بملفات السجل بعد ذلك.

من بين العمليتين، ستكون الكتابة إلى ملف السجل أسرع - خاصة أنك تقترح الكتابة إلى قاعدة بيانات على خادم آخر.

ومع ذلك، إذا كنت تحاول بعد ذلك معالجة ملفات السجل والبحث فيها بشكل منتظم، فإن أفضل مكان للقيام بذلك هو قاعدة البيانات.

إذا كنت تستخدم إطار عمل تسجيل مثل log4net، فغالبًا ما توفر طرقًا بسيطة تعتمد على ملف التكوين لإعادة توجيه الإدخال إلى ملف أو قاعدة بيانات.

أنا أحب إجابة جايوس.ضع كافة بيانات السجل في قائمة انتظار Threadsafe ثم قم بمعالجتها من هناك.بالنسبة لقاعدة البيانات، يمكنك تجميعها، على سبيل المثال، 100 بيان سجل في دفعة واحدة، وبالنسبة للملف، يمكنك فقط دفقها في الملف عند دخولها في قائمة الانتظار.

ملف أو ديسيبل؟كما يقول كثيرون آخرون؛يعتمد ذلك على ما تحتاج إلى ملف السجل من أجله.

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