السلام عليكم
سأكتب علي السريع بعض الخواطر في تحليل برمجة موقع إحصائيات
لعمل موقع إحصائيا تحتاج لكود يتم وضعه في المواقع التي ستقوم بعمل إحصائياتها
هذا الكود ينادي صفحة لديك مع كل زائر تقرأ بياناته العادية التي من السهل جداً قرائتها مثل
ip ودقة الشاشة لديه والمتصفح ونظام التشغيل وووو إلخ
من المفروض انك مع كل زائر يدخل الموقع ستقوم أولاً بتحديد عبر ال ip هل هذا الزائر زار هذا الموقع فقط من قبل أم لا
لو كان زاره نزيد ال page views له بصفحة
لو لم يكن زاره نزيد ال visitors للموقع ب 1
بالطبع مع إخدال بياناته كاملة في حقل لجدول مخصص في الداتا بيز
بالطبع انت لو ظللت تعمل هذه العملية مع كل زائر فثق تمام الثقة ان برمجيتك ستفشل
فتخيل معي لضبط الأمور كلها فأنت تحتاج علي أقل تقدير ل 5 كويري مع كل صفحة مستعرضة قد تصل لعرض إحصائيات شاملة لأكثر من ذلك لفحص بياناته القديم وهل تكرر ام لا وتحديث بياناته هو وتحديث بيانات الموقع نفسه إلخ ( مع العلم انك تقوم بالفحص داخل نتائج بالملايين )
هذا غير ما سيتم عمله فيما بعد ال 24 ساعه من ضبط إحصائيات الموقع نفسه الإجمالية قبل عرضها
وهذا أمر من الصعب جدا تحمله خاصة وأنت ستقدم إحصائيات لمواقع سيكون عدد زوارها إجمالاً أكثر من مليون زائر يومياً
لهذا فإن أفضل الحلول لهذه العملية هي كالتالي
مع كل زائر يزور الصفحة نعمل كويري واحدة فقط وهي insert ( هذه التعليمة من أخف التعليمات )
ندخل فيها بيانات العضو كاملة مع ال ip والموقع الموجود فيه حاليا والصفحة إلخ
يتم معالجة البيانات بطريقة من 2
1- كل ساعة تقوم بسحب كل تلك البيانات التي أدخلت خلال الساعة الماضية كاملة وتقوم بمعالجتها داخل مصفوفة ستكون بالطبع معقدة جدا لتفصل زوار كل موقع علي حدي
ثم تعيد فصل الزوار المكررين داخل كل موقع وتزيد عدد مرات زيارتهم بعدد تكرار ال ip لهم داخل مصفوفة الموقع الواحد إلخ
كل هذه العلمليات سيتم معالجتها بعمليات حسابية ومنطقية داخل السيرفر ( حمل علي الذاكرة والمعالج فقط ) ببعد كامل عن قواعد البيانات ومللها
بعد نهاية الحسبة ندون النتائج ونحذف القديمة فستكون الجديدة أقل بكثير من القديمة التي حذفنا منها كل التكرارات
بعد مرور 24 ساعة نأخذ النتائج الكاملة مرة أخري ونكرر معها نفس العملية السابقة ولكن ستكون العملية علي نتائج أقل مما لو تركنا الأمر كله لما بعد ال 24 ساعة
هذا العمل سيكون أخف جدا علي السيرفر ولكنه في نفس الوقت أكثر تعقيداً برمجيا كما أنه اي خطأ في اي مرة من المرات ستؤدي في الغالب لضياع إحصائيات ساعة كاملة
ولو كان لديك نظام لتحري الأخطاء وإعادة الحساب لو حدثت فأنت مع اي خطأ سيتزيد حمل إضافي للمزود ليعيد العمل
2- يتم العمل كل 24 ساعة فقط مع تقسيم العمل علي سيرفرين مثلاً أو عمل delay time بين كل 100 ألف حقل مثلاً
الأفكار كثيرة
مثلاً يتم جلب البيانات من الداتا بيز وتخزينها كل 100 ألف حقل في ملف منفصل مرقمة من 1 ل ...... النهاية
بعد الإنتهاء من تخزين كل نتائج الزوار خلال اليوم السابق في ملفات منفصلة ويتم ذلك بالطبع بكويري تجلب 100 ألف ثم تخزنها ثم delay time وهكذا حتي لا تزيد الحمل في ذلك الوقت علي السيرفر
بعد الإنتهاء تتصل علي سيرفر أخر سنسميه سيرفر الحساب فارغ ومعد فقط لحساب الإحصائيات وترسل له كافة الملفات بعد ضغطها
يستقبل سيرفر الحساب الملفات ويخزن كل النتائج في الداتا بيز لديه أولاً لتكون مرجع ويبدأ في التعامل معها وبعد نهاية كل كمية يكون قد دون نتائجه وهكذا حتي ينتهي
بعد الإنتهاء تماماً يرسل إحصائيات كل موقع فقط وليس تلك البيانات التي انتهي من حسابها للسيرفر الأول المخصص للإحصاء ليبدأ هذا السيرفر في عرضها
او قد يكون الموقع نفسه علي سيرفر ثالث بمعني
الموقع علي سيرفر وهو ما تدخله انت كصاحب موقع او زائر لتتصفحه وتستعرض النتائج
الصفحة التي تحسب الزوار وتدخل بياناتهم قاعدة البيانات علي سيرفر ثاني يسمي سيرفر الإحصاء <<< الحمل كله والشغل كله هنا وقد تحتاج لأكثر من سيرفر
الحساب للإحصائيات علي سيرفر ثالث يسمي سيرفر الحساب او علي سيرفر الموقع نفسه الأول والذي لا يكون عليه حمل فموقع رتب حسب ما أذكر زواره 25 ألف زائر فقط وليس صعب ان تزيد الحمل علي هذا السيرفر في العمليات الحسابية
أفكار :-
1- يمكنك إستخدام أكثر من سيرفر بدون كلاستر ولا أي هم من هموم الشبكات عن طريق وضع البرمجية الحاسبة للإحصائيات ( التي كانت علي سيرفر الإحصاء ) علي أكثر من سيرفر كل سيرفر له دومين فرعي مرقم مثلاً
srv1.example.com
srv2.example.com
srv3.example.com
إلخ
وحينما يقوم صاحب موقع بالتسجيل ليستخدم إحصائياتك تخرج له أحد روابط الحساب لإحدي هذه السيرفرات بشكل عشوائي ( نفس فكرة إستخدام أكثر من سيرفر لمركز تحميل ورفع الملفات علي أي سيرفر بشكل عشوائي ليكون التحميل فيما بعد عليه دائماً وهي فكرة تستخدما كل المواقع الكبيرة بلا إستثناء في التعامل مع موقعها )
مما يعني انه الموقع اللي هيتم إعطائه كود الإحصائيات واللي يستخدم ملف سيكون مثلا هكذا
srv1.example.com/getdata.php
سيكون حساب إحصائياته دائما علي هذا السيرفر
تقوم كل السيرفرات بنفس العملية كل 24 ساعة في إرسال حقولها للسيرفر الخارجة ليحسب كل شئ ويعرضه في الموقع لأصحاب المواقع
مع العلم انك يمكنك ان تقسم العمل انت بنفسك كما يفعل المستضيف في تقسيم المستضيفيين لديه
فتقوم لوضع موقع او موقعين كبار مع عدة مواقع صغيرة علي كل سيرفر عن طريق جعل كود الإحصاء الذي تعطيه للموقع يستخدم ملف علي سيرفر معين منهم
2- يمكنك علي سيرفر الحسابات الذي يتلقي الملفات من سيرفر الإحصاء ان تترك البيانات التي جائته في ملفات في قاعدة البيانات بحيث لو حدث خطأ في الإحصائيات يمكنك طلب إعادة حسابها منه وهنا يظهر لك بعض مواقع الإحصائيات التي قد تعلن انها ستتأخر في عرض إحصائيات اليومين السابقين
او أن الإحصائيات حدث فيها خطأ ولكنها ستعرض الأرقام الصحيحة فيما بعد
فقد يحدث وقت الحساب لهذه الإحصائيات الضخمة ان يحدث أي خلل وارد يؤدي لخطأ في النتائج مما يعني انك سيتم إبلاغك من أصحاب المواقع عن عدم دقة النتائج لهذا اليوم فتطلب منه إعادة جلبها وحسابها فهي لديه في قاعدة البيانات ولم تضيع
3- ليس شرط أن يقوم موقع الإحصاء كل 24 ساعة بتوريد إحصائياته في ملفات وإرسالها لسيرفر الحساب بل من الممكن ان تجعل سيرفر الحساب نفسه هو من ينادي API علي سيرفر الأحصاء ويطلب منه الداتا 100 ألف حقل ب 100 ألف مثلاً وكلما أنهي جزء ينادي علي الباقي ليكمل مع تخزين كل ما جلبه لديه كما وضحت حتي لا تضيع البيانات فيخزنها أولاً لديه ثم يبدأ في الحساب لها ثم يدون نتائجه وهكذا حتي ينتهي
4- يمكنك ان تكتب دالة تنادي هذه الدالة نفسها كلما كان اللود عالي فتفحص اللود لو كان عالي تقوم بعمل delay time عن طريق sleep ثم تنادي نفسها وهكذا فلو قل اللود لا تنادي نفسها وتكمل عمل الإحصائيات وتضع هذه الدالة داخل لوب حساب الإحصائيات علي سيرفر الإحصاء بحيث تقلل إمكانية حدوث خطأ حينما يزداد اللود فيعطل حسبة البيانات او تمر بعض الداتا بدون حساب
===================================
خلاصة القول : برمجية مثل هذه من الناحية البرمجية سهلة جدا
لكن التعقيد كله في الدوال التي ستستلم كم كبير من الداتا وتبدأ في التعامل مع تلك المصفوفات المعقدة لحذف المكرر وعمل الحسبة لكل موقع
الأخطاء التي تحدث من موقع إحصائيات لأخر في الغالب تكون أن كل موقع يكتب دواله الخاصة لحساب هذه العمليات وبالطبع كل موقع قد يكون لديه خطأ ما في حسبته فتخرج نتائج مختلفة لهذا كل من يبرمج مثل هذه البرمجيات يختبرها أولاً بمراجعة نتائجه مع موقع قديم وموثوق
معذرة كتبت الموضوع علي عجل في ربع ساعة وأكيد سيكون هناك نقاط غير واضحة او أخطاء إملائية
اعذروني فقد أحببت مشاركتكم هذا التحليل فقط
ثرثرة برمجية