سؤال

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

كانت فكرتي الأولى هي إنشاء 4 أعمدة مضادة في جدول DB للعنصر. واحد لكل من اليومية والأسبوعية والشهرية والإجمالية ، وإنشاء وظيفة cron ، التي تطهير العداد اليومي كل 24 ساعة ، العداد الأسبوعي كل 7 أيام وما إلى ذلك.

لكن مشكلتي في هذا هي ، ماذا يحدث إذا أردت أن أعرف أي من العناصر الأكثر مشهوبة في الأسبوع ، بعد تطهير العداد الأسبوعي؟

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

الآن أفكر في حل مع Redis Server, ، لكن ليس لدي أي حل بعد.

أنا فقط أبحث عن فكرة عامة هنا ، لكنني أقوم بتطوير هذا التطبيق في Ruby on Rails.

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

المحلول

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

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

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

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

نصائح أخرى

ما يمكنك فعله هو تخزين ما تمت زيارته وفي أي تاريخ (الطابع الزمني) وستفعل ذلك لكل مرة يتم زيارتها. عندما ترغب في استرداد ما تم زيارته ، ستختار تلك الموجودة في مجموعة من التواريخ (الطابع الزمني) وإضافتها معًا.

أو

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

يمكنك استخدام المثال الثاني والقيام بتخزين أسبوعي بدلاً من يوميًا إذا كانت أسابيعك مثل يوم الأحد إلى يوم الأحد وليس قبل 7 أيام من اليوم. لذا استبدل يوم الكلمات بكلمة الأسبوع وبالتالي وجود كميات أقل من تخزين البيانات.

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

فيما يلي احتمال لخادم Regis بعد النظر في بعض الوثائق.

SET link_id|date => "visit_count"

هذا يخزن link_id أو أيا كان ما تسميه مع date انفصل عن طريق | أو أي شخصية تريد استخدامها. في تلك القيمة الرئيسية تقوم بتخزين visit_count.

قل أنك تريد إضافة ضربة لهذا الرابط في هذا التاريخ. انت ترغب GET link_id|date ثم أضف +1 إلى visit_count يعود ثم تخزينه بالطريقة التي أظهرت أعلاه.

إذا كنت ترغب في الحصول على مبلغ الزيارات لتاريخ محدد ، فيمكنك مع GET link_id|date تكرارا.

يمكنك فقط استخدام Ruby-on-rails لاستبدالها link_id, date و visit_count مع القيم المناسبة.

آمل ان يساعدك هذا.

ما يمكنك فعله هو إنشاء جدول يسمى ViewCounters.

سيكون هناك عمود "pageid" ، وعمود "يوم" ، وعمود "طرق عرض". سوف يتوافق PageId مع الصفحة التي يتم عرضها ، وسيتوافق "اليوم" مع اليوم الذي تم عرضه عليه.

في كل مرة يتم عرض الصفحة ، تجد (أو أنشئ إذا لم يكن هناك واحد بعد) الصف في جدول ViewCounters مع PageId ، مع اليوم الحالي. عندئذٍ سيزيد من عمود "طرق العرض" لهذا الصف.

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

فائدة أخرى كبيرة لذلك هي أن صفًا لكل صفحة في اليوم الواحد ، وهو أمر ليس بهذا السوء حقًا.

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