كيف يمكنني تخزين كميات كبيرة للغاية من بيانات حركة المرور لسهولة الاسترجاع؟

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

  •  23-09-2019
  •  | 
  •  

سؤال

بالنسبة لنظام محاسبة حركة المرور ، أحتاج إلى تخزين كميات كبيرة من مجموعات البيانات حول حزم الإنترنت المرسلة من خلال جهاز توجيه البوابة الخاص بنا (يحتوي على الطابع الزمني أو معرف المستخدم أو الوجهة أو المصدر IP ، وعدد البايتات ، وما إلى ذلك).

يجب تخزين هذه البيانات لبعض الوقت ، على الأقل بضعة أيام. يجب أن يكون الاسترجاع السهل ممكنًا أيضًا.

ما هي الطريقة الجيدة للقيام بذلك؟ لدي بالفعل بعض الأفكار:

  • قم بإنشاء ملف لكل مستخدم ويوم وقم بإلحاق كل مجموعة بيانات به.

    • الميزة: من المحتمل أن تكون سريعة للغاية ، ومن السهل العثور على البيانات مع تخطيط ملف ثابت.
    • العيب: ليس من الممكن بسهولة رؤية جميع حركة المرور في UDP لجميع المستخدمين.
  • استخدم قاعدة بيانات

    • الميزة: من السهل جدًا العثور على بيانات محددة مع استعلام SQL الصحيح.
    • العيب: لست متأكدًا مما إذا كان هناك محرك قاعدة بيانات يمكنه التعامل بكفاءة مع جدول مع مئات من مجموعات البيانات الملايين.
  • ربما يكون من الممكن الجمع بين النهجين: استخدام ملف قاعدة بيانات SQLite لكل مستخدم.

    • الميزة: سيكون من السهل الحصول على معلومات لمستخدم واحد باستخدام استعلامات SQL على ملفه.
    • العيب: سيظل الحصول على المعلومات الإجمالية أمرًا صعبًا.

ولكن ربما يكون لدى شخص آخر فكرة جيدة جدًا؟

شكرا جزيلا مقدما.

لا يوجد حل صحيح

نصائح أخرى

أولا ، احصل مجموعة أدوات مستودع البيانات قبل أن تفعل أي شيء.

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

لاحظ مستودع بيانات لا يعني الجنون الكبير أو باهظ الثمن أو معقد. وهذا يعني مخطط النجوم والطرق الذكية للتعامل مع كميات كبيرة من البيانات التي لم يتم تحديثها أبدًا.

  1. قواعد بيانات SQL بطيئة ، لكن هذا بطيء جيد لاسترجاع مرن.

  2. نظام الملفات سريع. إنه أمر فظيع للتحديث ، لكنك لا تحديث ، فأنت تتراكم فقط.

نهج DW نموذجي لهذا هو القيام بذلك.

  1. حدد "مخطط النجوم" لبياناتك. الحقائق القابلة للقياس والسمات ("الأبعاد") لتلك الحقائق. ويبدو أن الحقيقة الخاصة بك هي # من البايتات. كل شيء آخر (العنوان ، الطابع الزمني ، معرف المستخدم ، إلخ) هو بُعد لهذه الحقيقة.

  2. بناء بيانات الأبعاد في قاعدة بيانات الأبعاد الرئيسية. إنها صغيرة نسبيًا (عناوين IP ، والمستخدمين ، وبعد التاريخ ، وما إلى ذلك) سيكون لكل بُعد جميع السمات التي قد ترغب في معرفتها. هذا ينمو ، ويضيف الناس دائمًا سمات للأبعاد.

  3. قم بإنشاء عملية "تحميل" تأخذ السجلات الخاصة بك ، وتحل الأبعاد (الأوقات والعناوين والمستخدمين ، وما إلى ذلك) ودمج مفاتيح الأبعاد في التدابير (# البايتات). قد يقوم هذا بتحديث البعد لإضافة مستخدم جديد أو عنوان جديد. بشكل عام ، أنت تقرأ صفوف الحقائق ، وتقوم بالبحث وكتابة صفوف الحقائق التي تحتوي على جميع FK المناسبة المرتبطة بها.

  4. احفظ ملفات التحميل هذه على القرص. لم يتم تحديث هذه الملفات. أنها تتراكم فقط. استخدم تدوينًا بسيطًا ، مثل CSV ، بحيث يمكنك تحميلها بسهولة.

عندما يريد شخص ما القيام بالتحليل ، قم ببناءها على Datamart.

للحصول على عنوان IP المحدد أو الإطار الزمني أو أي شيء آخر ، احصل على جميع الحقائق ذات الصلة ، بالإضافة إلى بيانات الأبعاد الرئيسية المرتبطة وتحميل Datamart.

يمكنك القيام بجميع استفسارات SQL التي تريدها على هذا مارت. سوف تتحول معظم الاستفسارات إلى SELECT COUNT(*) و SELECT SUM(*) مع مختلف GROUP BY و HAVING و WHERE شروط.

أعتقد أن الإجابة الصحيحة تعتمد حقًا على تعريف "مجموعة البيانات". كما ذكرت في سؤالك ، تقوم بتخزين مجموعات من المعلومات الفردية لكل سجل ؛ الطابع الزمني ، المستخدم ، IP الوجهة ، المصدر IP ، عدد البايت وما إلى ذلك ..

SQL Server قادر تمامًا على تسليم هذا النوع من تخزين البيانات مع مئات الملايين من السجلات دون أي صعوبة حقيقية. منح هذا النوع من التسجيل سيتطلب بعض الأجهزة الجيدة للتعامل معها ، ولكن لا ينبغي أن يكون معقدًا للغاية.

أي حل آخر في رأيي سيجعل الإبلاغ صعبًا للغاية ، ومن أصواتها مطلبًا مهمًا.

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

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

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

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