كيف يمكنى استخدام جملة Select مع استعلام فى قاعدة بيانات تحتوى على اكثر من مليون سجل وكيف تكون هذه العملية سريعة
التعامل مع قاعدة بيانات تحتوى على أكثر من مليون سجل
شاهد الدروس من 22 إلى 51 من هذه السلسلة
http://www.waqfonline.com/category/information-technology/programming/sql-server-2008
السلام عليكم
نرجو التوضيح ما الذي تريد عمله بالضبط حيث ان المليون سجل عدد كبير ومن غير المعقول ان تتعامل معهم في نفس الوقت لذا عليك ان تحاول ان تضع شروط لتقليل العدد الذي ستتعامل معه .
تم تحديد تاريخ يوم واحد فقط وايضا حجم البيانات فى هذا اليوم كثيرة حيث ان البيانات تزيد كل 5 ثوانى يضاف سجل جديد وتاخذ وقت فى التنفيذ
تحتاج الى وضع index على التاريخ حتى يسرع عملية الفلترة .
وايضا لاتنسى انك تحتاج الى عتاد جيد مثل CPU & RAM .
اقتباستم تحديد تاريخ يوم واحد فقط وايضا حجم البيانات فى هذا اليوم كثيرة حيث ان البيانات تزيد كل 5 ثوانى يضاف سجل جديد وتاخذ وقت فى التنفيذ
سجل كل 5 ثواني يعني 12 سجل في الدقيقة يعني 720 سجل في الساعة الواحده
يعني اذا كان عدد ساعات العمل 8 ساعات * 720 سجل للساعة = 5760 سجل ليوم العمل الواحد
هل هذه الحسبة سليمة ؟؟
هل هذا التطبيق عبارة عن log يحتفظ بما يفعلة المستخدمين علي البرنامج
ارجو شرح الموضوع بكافة تفاصيلة حتي نستطيع وضع الحلول المناسبة لك فيما يخص هذه الجزئية


عدد ساعات العمل 24 ساعة
هو عبارة عن جدول log فى قاعدة بيانات
أخي الفاضل
bg3damxتعتبر جداول الــ Log في البرامج الكبيرة من الجداول الاكثر عدد بيانات وفعلا يصل عدد السجلات بداخلها للملايين وعلي المستوي الشخصي أنا أتعامل مع هذه الجداول باستمرار لذلك
أود أن أنقل لك بعض النصائح المهمة فيما يخص هذه الجزئية
1- عندما تبني جدول الــ Log يجب ان يكون التركيز فقط علي الجداول الاكثر أهمية والتي المستخدمين دائمي الاستفسار عن من وأين ومتي تم حذف هذا السجل ولا تقم بتحديد جميع الجداول لتخفيف الحمل علي قاعده البيانات الا اذا كان المطلوب جميع الجداول وفي هذه الحالة سيصبح عدد البيانات كثير جدا ولتجد طريقة للتعامل مع جداول اللوج
2- يجب تفريغ جداول اللوج كل فترة زمنية معينة فمثلا ربما تحتاج لازالة البيانات التي مضي عليها أكثر من 5 شهور مثلا وذلك لتخفيف الحمل علي الجدول وعلي قاعده البيانات
3- وبذلك تكون محكوم بعدد سجلات معينة تبحث بداخلها بتواريخ معينة ويجب ان يعلم المسؤلين طرفك انك لن تستطيع الاستعلام عن بيانات أقدم من 5 أشهر لاسباب فنية
4- اذا كان جدول اللوج مساحتة كبيرة جدا وتؤثر علي آداء البرنامج فيجب وضع جدول اللوج داخل FileGroup منفصل بعيدا عن ملفات قاعده البيانات حتي لا يؤثر علي آداء البرنامج
5- يجب تقسيم الجدول عن طريق Horizontal partioning حتي تستطيع البحث داخل الجدول بشكل سريع عن الطرق المعتاده
6- يجب ان يكون شروط البحث ليست بمدد كبيرة حتي لا يأخذ الاستعلام مده طويلة ولا يتعرض timeout أثناء التنفيذ
7- تفريغ اللوج كل فترة يحسن من آداء البرنامج أيضا التركيز علي الجداول الاكثر أهمية لوضعها في اللوج من الاشياء المهمة
بالتوفيق


بالإمكان عمل عدة جداول لـ Log بحيث يكون الأول لحفظ التغييرات خلال فترة قريبة مثلا أسبوع أو 15 يوم أو شهر
وجدول ثاني لمدة 6 شهور مثلا
وثالث لسنة وما فوق
الآن يتم التعامل مع الجدول الأول و في نهاية كل يوم مثلا في أوقات يتوقع فيها الضغط الخفيف يتم نقل كل السجلات التي تجاوزت المدة إلى الجدول الذي يليه
وبنفس الأمر نفحص الجدول الثاني ونقوم بنقل كل البيانات التي تجاوزت مدة الأرشيف الثاني إلى الجدولالثالث
الآن التعامل يكون مع الاول والتي سجلاته ستكون قليلة على اعتبار أنها لن تحوي سوى سجلات فترة قصيرة
وأما الثاني والثالث فهما بمثابة أرشيف قصير الأمد وطويل الأمد
ولا يتم التعامل معهم إلا عند الحاجة وبالتالي سيكون المستخدم مهيأ للانتظار للحصول على النتيجة
في هذه الحالة عند الاستفسارات يجب أن يكون هناك خيارات يدوية من قبل المستخدم أو تلقائية تعتمد على الشروط والنتائج
كأن تخير المستخدم هل تريد البحث ضمن آخر أسبوع أم 6 أشهر أم أكثر من سنة
من جهة أخرى بالإمكان فقط عند عدم حصول على نتائج في الجدول الأول الانتقال للبحث في الجدول الثاني أو الثالث
إذا خلاصة القول أننا نجعل التعامل دائما مع عدد محدود قد لا يتجاوز عشرات الآلاف
وفقط عند الحاجة يتم التعامل مع مئات الآلاف وفي حالات نادرة جدا جدا يتم التعامل مع ملايين
ناحية أخرى بإمكانك عمل أكثر من جدول لوج وتقسمهم بحسب نوع التغيير
مثلا جدول خاص فقط بإنشاء السجلات الجديدة
وجدول آخر فقط لحفظ السجلات التي حذفت
وآخر فقط لتسجيل الدخول والخروج
وآخر فقط للأخطاء
من هنا تجعل البحث محصور في الجدول المناسب للاستفسار
فمن يبحث عن السجلات المحذوفة سيبحث في جدول فيه بيانات أقل بكثير من جداول أخرى أو جدول واحد يضم الجميع
تم تعديل هذه المشاركة بواسطة أبو أحمد المبرمج في 16 أبريل 2013 في 15:46
ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها
كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور
لو امكن يكون قاعدة بيانات مستقله ويفضل خامد مستقل وعلي SAN DISK هذا سيزيد من السرعة كثير مع تقسيم الوج وpartioning وINDEXوشكل جملة الاستعلام واستخدما استود بروسجير بالاضافة الي ما قيل بالاعلي من الاخوه
سبحانه الله وبحمده سبحانه الله العظيم
if (You Love ArabTeam2000 ) MessageBox.Show("All ArabTeam2000 Love You"); else MessageBox.Show("go to your mama"); Make it run, make it right, make it fast, make it small
normalize your data and don't make it look like excel sheet
الأبداع في الرأس والعلم في الكراس
روابط مفيدة
[دروس] تجاهل الwhere
طريقة الاضافة للجدولين مرتبطين مرة واحدة
قراءة صوره من مسار
حل مشكلة الارقام العربي في الكريستال ريبورت
حل مشكلة تصدير OLE Object الي Physical File مرة أخري
كود عمل نسخة يومية من قاعدة البيانات بتاريخ مع حذف النسخة السابقة من 30 يوم مضي
معظم دوال التعامل مع string
Change Data Capture
SQL Course
string-format-datetime
LINQ to SQL in C#
Sum-of-previous-row-values-in-SqlServer
alarm-for-stop-agent-service
SQL Server CTE
شكرا جزيلا
