كيو البيانات مستودع:أفضل نهج في الوقت شبه الحقيقي ETL / استخراج البيانات

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

سؤال

الخلفية:

عندي كيو (v8.3) قاعدة البيانات بشكل كبير الأمثل OLTP.

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

كم البيانات ؟ في أوقات الذروة نحن نتحدث تقريبا من 80-100 ألف الصفوف في مين ضرب OLTP الجانب الذروة هذا الانخفاض بشكل كبير إلى 15 20k.أكثر في كثير من الأحيان تحديث الصفوف ~64 بايت بعضها ولكن هناك العديد من الجداول الخ وبالتالي فإن البيانات هي متنوعة جدا ويمكن أن تتراوح ما يصل إلى 4000 بايت لكل صف.على OLTP نشطة 24x5.5.

أفضل حل ؟

من ما أستطيع أن قطعة معا الحل الأكثر عملية على النحو التالي:

  • إنشاء الزناد أن يكتب كل DML النشاط الدورية CSV ملف السجل
  • القيام بأي التحولات المطلوبة
  • استخدام الأم DW البيانات مضخة أداة كفاءة مضخة تحولت CSV إلى DW

لماذا هذا النهج ؟

  • مشغلات تسمح انتقائية الجداول أن يكون المستهدفة بدلا من نظام واسع + الإخراج هو شكلي (أيإلى CSV) و هي سهلة نسبيا كتابة ونشر.SLONY يستخدم نهج مماثل والنفقات العامة مقبولة
  • CSV سهلة وسريعة لتحويل
  • من السهل مضخة CSV إلى DW

بدائل النظر ....

  • استخدام الأم تسجيل (http://www.postgresql.org/docs/8.3/static/runtime-config-logging.html).المشكلة مع هذا بدا مطول جدا بالنسبة إلى ما احتاجه وكان اصعب قليلا لتحليل وتحويل.ومع ذلك يمكن أن يكون أسرع كما أفترض هناك أقل من النفقات العامة مقارنة الزناد.بالتأكيد من شأنه أن يجعل المشرف أسهل كما هو منظومة واسعة ولكن مرة أخرى, أنا لا أحتاج بعض الجداول (بعض المستخدمة في التخزين الثابتة من الدائرة الرسائل التي لا تريد تسجيل الدخول)
  • الاستعلام عن البيانات مباشرة عن طريق ETL أداة مثل Talend و ضخه إلى DW ...المشكلة هي OLTP مخطط تحتاج أنب إلى دعم هذا و يحتوي على العديد من سلبية الآثار الجانبية
  • باستخدام أنب/اختراق SLONY - SLONY يقوم بعمل جيد من تسجيل وترحيل التغييرات عبدا لذلك الإطار المفاهيمي هو هناك ولكن الحل المقترح فقط يبدو أسهل و أنظف
  • باستخدام وول

وقد أي شخص من أي فعلت هذا من قبل ؟ ترغب في مشاركة أفكارك ؟

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

المحلول

على افتراض أن الجداول الخاصة بك من المصلحة (أو يمكن أن تضاف مع) فريدة من نوعها, فهرسة, متتابعة مفتاح, ثم سوف تحصل على الكثير من القيمة أفضل بكثير من مجرد إصدار SELECT ... FROM table ... WHERE key > :last_max_key مع الإخراج إلى ملف ، حيث last_max_key آخر قيمة المفتاح من آخر استخراج (0 لو استخراج أول.) هذا تدريجي تنفصل النهج يتجنب إدخال الزناد الكمون في الإدراج datapath (يكون ذلك العرف يطلق أو تعديل Slony) ، اعتمادا على الإعداد الخاص بك يمكن أن مقياس أفضل مع عدد من وحدات المعالجة المركزية.... الخ(ومع ذلك ، إذا كان لديك أيضا المسار UPDATEs, و متسلسلة الرئيسية التي تم إضافتها من قبل ، ثم UPDATE البيانات SET مفتاح العمود NULL حتى يحصل قيمة جديدة و يحصل التقطت بعد الاستخراج.كنت لا تكون قادرة على تتبع DELETEs دون الزناد.) هذا ما كان في الذهن عند ذكر Talend?

أود أن عدم استخدام تسجيل مرفق إلا إذا كنت لا تستطيع تنفيذ الحل أعلاه;تسجيل الأرجح ينطوي تأمين النفقات العامة لضمان تسجيل خطوط مكتوبة بالتتابع و لا تتداخل/الكتابة فوق بعضها البعض عند متعددة الخلفيات الكتابة إلى السجل (راجع بوستجرس المصدر.) تأمين النفقات العامة قد لا تكون كارثية ، ولكن يمكنك أن تفعل دون ذلك إذا كان يمكنك استخدام تدريجي SELECT البديلة.وعلاوة على ذلك ، بيان تسجيل سيقضي على أي فائدة الإنذار أو رسائل الخطأ ، تحليل نفسها لن تكون لحظية.

إلا إذا كنت على استعداد تحليل فالس (بما في ذلك المعاملات تتبع الدولة ، ويجري على استعداد لإعادة كتابة التعليمات البرمجية في كل مرة يمكنك ترقية بوستجرس) وأود أن ليس بالضرورة استخدام فالس ايضا .. هذا إذا لم يكن لديهم أجهزة إضافية متوفرة, في هذه الحالة يمكن أن السفينة فالس إلى آخر آلة استخراج (على الجهاز الثاني يمكنك استخدام المشغلات بلا خجل - أو حتى بيان تسجيل-منذ ما يحدث هناك لا يؤثر على INSERT/UPDATE/DELETE الأداء الرئيسية آلة.) علما بأن الحكمة (في الابتدائي آلة), إلا إذا كنت يمكن أن يكتب السجلات إلى سان ستحصل على مقارنة الأداء ضرب (من حيث إتلاف ملفات ذاكرة التخزين المؤقت ، في الغالب) من الشحن فالس إلى آلة مختلفة من تشغيل تدريجي SELECT.

نصائح أخرى

إذا كنت تستطيع التفكير في 'الاختباري الجدول' الذي يحتوي فقط على الهوية و 'الاختباري' يمكنك ليس فقط سريع حدد من سجلات جديدة ولكن أيضا تغيير السجلات المحذوفة.

المجموع الاختباري يمكن أن يكون crc32 الاختباري وظيفة تريد.

الجديد في الصراع شرط في الإنترنت قد غيرت الطريقة التي كنت تفعل العديد من التحديثات.أنا سحب البيانات الجديدة (على أساس row_update_timestamp) في الجدول المؤقت ثم في SQL إدراج في الجدول الهدف مع الصراعات التحديث.إذا الهدف الخاص بك الجدول تقسيم ثم تحتاج إلى القفز من خلال زوج من الأطواق (أيضرب تقسيم الجدول مباشرة).ETL يمكن أن يحدث كما يمكنك تحميل الجدول المؤقت (على الأرجح) أو في الصراعات SQL (إذا تافهة).مقارنة إلى أخرى "UPSERT" نظم (Update, insert إذا صفر الصفوف.... الخ) وهذا يدل على تحسين سرعة كبيرة.في منطقتنا خاصة DW البيئة لا نحتاج/تريد أن تستوعب حذف.تحقق من الصراعات مستندات - أنه يعطي أوراكل دمج تشغيل هذا المال!

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