أفضل الممارسات لإدخال البيانات والاستعلام عنها من الذاكرة

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

  •  02-10-2019
  •  | 
  •  

سؤال

لدينا تطبيق يأخذ بيانات الوقت الفعلي ويدخلها في قاعدة البيانات. إنه عبر الإنترنت لمدة 4.5 ساعات في اليوم. نقوم بإدراج البيانات الثانية في المرتبة الثانية في 17 جدول. يجوز للمستخدم في أي وقت الاستعلام عن أي جدول لأحدث البيانات الثانية وبعض السجلات في السجل ...

يتم التعامل مع التغذية والإدراج باستخدام تطبيق C# وحدة التحكم ...

يتم التعامل مع طلبات المستخدم من خلال خدمة WCF ...

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

على افتراض أن لدينا ذاكرة كافية ، ما هي أفضل الممارسات لإدراج البيانات في الذاكرة بدلاً من وجود قاعدة بيانات. نستخدم حاليًا Datatables التي يتم تحديثها وإدراجها في كل ثانية ، اقترح زميلنا خدمة WCF أخرى بدلاً من قاعدة البيانات بين معالج التغذية ومعالج WCF-requests. من المفترض أن تكون الطبقة المتوسطة WCF تعتمد على TCP وتحتفظ بالبيانات في ذاكرتها الخاصة. قد يقول المرء أن معالج التغذية قد يتعامل مع أسواليات المستخدم بدلاً من وجود طبقة متوسطة بين عمليتين ، لكننا نريد فصل الأشياء ، لذا إذا كان معالج التغذية قد نريد أن نكون قادرين على تزويد المستخدم بالسجلات الحالية

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

من فضلك ساعدني!

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

المحلول

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

سيستند إبطال البيانات في ذاكرة التخزين المؤقت إلى ما إذا كانت مكتوبة إلى قاعدة البيانات أو قديمةها ، والتي تأتي من أي وقت مضى الاخير, ، ليس أولا.

لا تحتاج طبقة ذاكرة التخزين المؤقت إلى التعقيد ، ومع ذلك يجب أن تكون متعددة الخيوط لاستضافة البيانات وأيضًا حفظها في الخلفية. سوف تجلس هذه الطبقة خلف خدمة WCF مباشرة ، ووسائل الاتصال ، وخدمة WCF يجب تحسينها لاحتواء منطق تطبيق وحدة التحكم + فكرة التثبيت. ثم يمكن لتطبيق وحدة التحكم الاتصال بـ WCF ورمي النتائج عليه.

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

نصائح أخرى

ما نوع قاعدة البيانات التي تستخدمها؟ لدى MySQL ذاكرة محرك تخزين يبدو أنها مناسبة لهذا النوع من الأشياء.

هل تستخدم DataTable مع DataAdapter؟ إذا كان الأمر كذلك ، فإنني أوصي بأن تسقطها تمامًا. أدخل سجلاتك مباشرة باستخدام DBCommand. عندما يطلب المستخدمون التقارير ، اقرأ البيانات باستخدام DataReader ، أو ملء كائنات DataTable باستخدام datatable.load (idatareader).

تحتوي بيانات القصص في الذاكرة على خطر فقدان البيانات في حالة حدوث حالات تعطل.

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