(ASP.NET) كيف يمكنك أن تذهب نحو إيجاد الوقت الحقيقي العداد الذي يقيس قاعدة بيانات التغييرات ؟

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

سؤال

هنا هي المشكلة.

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

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

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

فما النهج يا رفاق ؟ أول ما خطر في ذهني هو خدمة ويب الذي يحصل على البيانات عن طريق AJAX الاتصال.ربما في كل مرة جديدة "ميل" الدخول إضافة الزناد وأطلق و التحديثات "GlobalMiles" الجدول.

أود أن نقدر أي معلومات أو نصائح على هذا.

شكرا جزيلا!

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

المحلول

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

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

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

أما بالنسبة ديناميكية التقرير نفسه لديك عدد قليل من الخيارات.

بالطبع يمكنك فقط تحديد مبلغ () ، ولكن يبدو أن تسبب مشاكل في الأداء إذا كان كل مستخدم لديه عدد كبير من الإدخالات.

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

CREATE VIEW vw_Miles WITH SCHEMABINDING AS 
SELECT SUM([Count]) AS TotalMiles, 
COUNT_BIG(*) AS [EntryCount],
UserId
FROM Miles
GROUP BY UserID
GO
CREATE UNIQUE CLUSTERED INDEX ix_Miles ON vw_Miles(UserId)

إذا النفقات العامة من ذلك كثيرا ، @jn29098 حل جيد مرة واحدة.نشمر عن ذلك باستخدام مهمة مجدولة.إذا كان هناك الكثير من إدخالات لكل مستخدم ، يمكنك فقط إضافة الدلتا من آخر مرة كانت مهمة تشغيل.

UPDATE GlobalMiles SET [TotalMiles] = [TotalMiles] + 
  (SELECT SUM([Count]) 
    FROM Miles 
    WHERE UserId = @id 
      AND EntryDate > @lastTaskRun
    GROUP BY UserId)
WHERE UserId = @id

إذا كنت لا تهتم حول تخزين الإدخالات الفردية ولكن فقط من إجمالي يمكنك تحديث الاعتماد على الطاير:

UPDATE Miles SET [Count] = [Count] + @newCount WHERE UserId = @id

هل يمكن استخدام هذا الأسلوب بالتزامن مع SPROC أن يضيف دخول لها في العالمين.

وأخيرا الزناد الأسلوب من شأنه أن تعمل بشكل جيد.انها بديل عرض مفهرسة حيث يمكنك القيام التحديث نفسك على طاولة instad من SQL تفعل ذلك تلقائيا.كما أنها مماثلة إلى الخيار السابق حيث يمكنك التحرك العالمي التحديث من sproc إلى الزناد.

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

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

نصائح أخرى

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

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

كم عدد المستخدمين الذي تتحدث عنه وكم سجل السجلات في اليوم الواحد؟

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