سؤال

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

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

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

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

المحلول

ويمكن استخدام قائمة مرتبطة بسيطة لهذا الغرض.

في الأساس، تقوم بإضافة عناصر جديدة إلى النهاية، وإزالة العناصر القديمة جدًا من البداية، إنها بنية بيانات رخيصة.

رمز المثال:

list.push_end(new_data)
while list.head.age >= age_limit:
    list.pop_head()

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

نصائح أخرى

أعتقد أن أحد الاعتبارات المهمة سيكون تكرار الاستعلام مقابل تكرار الاستعلام.إضافة/إزالة.إذا كنت ستقوم بالاستعلام بشكل متكرر (خاصة إذا كان لديك مجموعة كبيرة) فقد تكون شجرة B هي الحل الأمثل:

http://en.wikipedia.org/wiki/B-tree

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

ذاكرة التخزين المؤقت مع انتهاء الصلاحية المنزلق ستقوم بالمهمة ....

قم بحشو العناصر الخاصة بك وستتعامل ذاكرة التخزين المؤقت مع التقادم ....

http://www.sharedcache.com/cms/

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