Zakariae Jaafari

المشاريعمساند

NYC Taxi Ingestion Pipeline

مهمة محوّاة، محدودة الذاكرة، تبث ملفات رحلات سيارات الأجرة الصفراء في نيويورك إلى PostgreSQL.

نظرة عامة

مهمة إدخال محوّاة تحمّل ملفات CSV الشهرية لسيارات الأجرة الصفراء من TLC إلى PostgreSQL على دفعات ثابتة الحجم، فتبقى ذروة الذاكرة ثابتة مهما كبر الملف. بُنيت أثناء متابعة وحدة Docker في Data Engineering Zoomcamp من DataTalksClub، ثم هُذّبت كمهمة مستقلة.

المشكلة

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

الحل التقني

يُنتج pandas دفعات من 100 ألف صف. خريطة أنواع صريحة — منها Int64 القابل للقيم الفارغة — تُبقي مخطط كل دفعة مطابقًا، وهذا ما يمنع فشل الإدراج في منتصف المهمة. الكتابة الأولى تنشئ الجدول من المخطط دون صفوف؛ واللاحقة تُضيف. تُبنى الصورة من ملف قفل uv مُودَع.

ما يوجد في المستودع

  • بث CSV على دفعات من ملفات TLC العلنية
  • أنواع وأختام زمنية صريحة لمخطط ثابت
  • مكدس Docker Compose: PostgreSQL 18 بفحص صحة، وpgAdmin
  • بيانات الاعتماد من متغيرات البيئة، لا من وسائط سطر الأوامر
  • صورة قابلة لإعادة الإنتاج عبر ملف قفل uv

قرارات تقنية

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