سؤال

كيف يمكنك تنظيم طبقة قاعدة البيانات ومنطق الأعمال وواجهة برمجة التطبيقات عبر الأنظمة الأساسية لنظام إدارة المعلومات لديك، إذا كان تحميل ومعالجة 500000 سجل بيانات في جلسة واحدة عملية عادية (C# .NET 3.5 + MS SQL 2005)؟

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

هل لدى أي شخص أي أفكار، في أي اتجاه لحفر؟

  • المشاريع مفتوحة المصدر (لا تهتم باللغة أو النظام الأساسي، طالما أنها ليست على ما يرام)
  • كتب
  • مقالات
  • الكلمات الرئيسية جوجل
  • المنتديات أو مجموعات الأخبار

أي مساعدة سيكون موضع تقدير كبير!

تحديث:

  • الترحيل البسيط (أي:لا يعمل Rownumber في SQL 2005) ، حيث يوجد الكثير من منافس التغييرات في قاعدة البيانات.العنصر الذي يتم حذفه أو إدراجه بين طلبات الصفحة، يجعل فهرس الصفحة الحالية غير صالح تلقائيًا.
هل كانت مفيدة؟

المحلول 3

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

في حال احتاج شخص آخر إلى بعض المعلومات:

نصائح أخرى

هذا كتاب جيد للبدء به:

أنماط بنية تطبيقات المؤسسات بواسطة مارتن فاولر

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

بالنسبة إلى الترحيل في MS SQL 2005، ستحتاج إلى العثور على مزيد من المعلومات حول استخدام وظيفة ROW_NUMBER. هنا مجرد مثال بسيط, ، ستجد الكثير منها باستخدام جوجل (الكلمات الرئيسية:ROW_NUMBER ترحيل الصفحات SQL 2005).لا تتعمق كثيرًا – ليس هناك سحر في التنفيذ، بل في كيفية استخدام/تقديم الترحيل نفسه.بحث جوجل هو مثال جيد.

ملحوظة:وجدنا أن دعم الترحيل الأصلي لإطار عمل NHibernate غير كافٍ لحلنا.

من المحتمل أيضًا أن تكون مهتمًا بإنشاء فهرس FULLTEXT واستخدام البحث عن النص الكامل. هنا مقالة MSDN على إنشاء فهرس النص الكامل، و بعض المعلومات في البحث عن النص الكامل.

حظ سعيد.

دانديكاس,

أشكركم على ذكر عدم التطبيع الجزئي.نعم، هذا هو النهج الذي أفكر فيه لتحسين أداء بعض الاستعلامات.

لسوء الحظ، لا يتناسب NHibernate ORM مع الحل، وذلك بسبب عبء الأداء الذي يضيفه.نفس الشيء مع ترحيل صفحات SQL - فهو لا يعمل في سيناريو العديد من التعديلات المتزامنة (كما اكتشفه ملف اختبار الإجهاد)

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

  • تلقي الملفات النصية التي نقوم بتحميلها إلى قاعدة بيانات Sybase.
  • قم بتنسيق الخلاصات المختلفة باستخدام awk بحيث تكون بتنسيق مشترك.
  • قم بتحميلها في جدول متوسط ​​غير طبيعي باستخدام bcp.
  • تشغيل الإجراءات المخزنة لملء بنية قاعدة البيانات التي تمت تسويتها.
  • حذف من الجدول الوسيط غير الطبيعي.

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

هل أي من ذلك مفيد؟

نفس الشيء مع ترحيل SQL - لا يعمل في سيناريو العديد من التعديلات المتزامنة (كما تم اكتشافه بواسطة اختبار الإجهاد)

كما ذكرت، ليس هناك سحر في تنفيذ الترحيل – يمكنك إما استخدام ROW_NUMBER أو جدول مؤقت.يكمن السحر هنا في تقييم سيناريو الاستخدام الأكثر شيوعًا في العالم الحقيقي.قد يساعد استخدام الجدول المؤقت مع تتبع المستخدم قليلاً في التغلب على سيناريو التعديلات المتزامنة.على الرغم من أنني أشعر أنك ستربح أكثر من خلال الإجابة على الأسئلة:

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

حاول ألا تركز على سؤال مثل:"كيف تتعامل مع أي سيناريو محتمل للتزامن أثناء الترحيل؟" قبل أن تجيب أعلاه على الأسئلة أولاً ثم التعامل مع المواقف التي تهم حقًا.

ملاحظة أخرى هي واجهة المستخدم.تحقق من أكبر قدر ممكن من واجهة مستخدم الترحيل، حيث توجد حلول أفضل بكثير من مجرد الأسهم اليمنى واليسرى، أو أرقام الصفحات المصفوفة.تساعد بعض الحلول في إخفاء/التغلب على سيناريوهات الترحيل غير القابلة للحل تقنيًا.

ملاحظة.إذا كانت هذه الإجابة مفيدة فسوف أدمجها مع إجابتي الأولى.

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