قراءة الملف
295,481 صفاً في ملف مسطّح واحد، يكرّر كل منها مطعمه وزيارته.
دراسة حالة · اختبار على بيانات عامة، وليس عميلاً
قبل أن ننقل بيانات أي عميل، نجري تجربة على بيانات فوضوية بقدر بياناته. هذه واحدة من تلك التجارب: ملف تفتيش المطاعم العام لمدينة نيويورك، 295,481 صفاً، نُقل إلى قاعدة بيانات حقيقية وفُحص صفاً بصف. اختبار أجريناه على أنظمتنا في مارس 2026، وليس مشروعاً لعميل.

01المشكلة
تنشر المدينة كل عمليات التفتيش في ملف مسطّح واحد. كل صف يكرّر المطعم والزيارة، فيظهر المطعم الواحد مرات ومرات؛ وبعض الصفوف لا تسجّل أي مخالفة، وبعض الزيارات مؤرخة في 1 يناير 1900. معظم بيانات الأعمال التي يُطلب منا نقلها تبدو هكذا.
02ما فعلناه
قسّمنا الملف إلى ثلاثة جداول مترابطة (المطاعم والتفتيشات والمخالفات)، ووضعنا جانباً ما لا يمكن أن يكون صحيحاً، وطابقنا كل جدول مع المصدر قبل أن نعتبر العمل منتهياً.
03ما أظهره
تحوّلت 295,481 صفاً إلى 3 جداول مترابطة في 4 د 30 ث، مع تطابق أعداد الصفوف والمجاميع الاختبارية ودون أي سجل يتيم. وكشفت التجربة أيضاً خمسة أعطال في أدواتنا، أُصلحت جميعها في اليوم نفسه.
ملف واحد يدخل، ثلاثة جداول تخرج
كان الملف يكتب كل مطعم وكل زيارة من جديد مع كل مخالفة. بعد تقسيمه إلى ثلاثة جداول، يُخزَّن كل مطعم مرة واحدة، وكل زيارة مرة واحدة، وتُربط كل مخالفة بالزيارة التي سُجّلت فيها.
كيف سار التشغيل
الخطوات الثلاث نفسها تجري في كل ترحيل ننفّذه؛ وهذا ما فعلته كل منها بهذا الملف.
295,481 صفاً في ملف مسطّح واحد، يكرّر كل منها مطعمه وزيارته.
كل مطعم وكل زيارة مخزّنة مرة واحدة؛ ووُضعت التواريخ المستحيلة والصفوف الفارغة جانباً وعُدّت.
أعداد الصفوف والمجاميع الاختبارية وكل رابط بين السجلات، مُطابَقة مع المصدر.
الصفوف التي لا يمكن أن تكون صحيحة، أو التي لا تحمل شيئاً، وُضعت جانباً وعُدّت، ولم تُحمَّل أبداً كأنها حقيقية.
| البند | العدد |
|---|---|
| صفوف بلا مخالفة | 5,727 |
| زيارات مؤرخة في 1 يناير 1900 | 3,425 |
كانت قراءة الملف الجزء السريع. ذهب معظم الوقت في بناء الجداول الثلاثة وربطها.
| البند | العدد |
|---|---|
| قراءة الملف | 90 ث |
| بناء الجداول الثلاثة | 180 ث |
1,094 صفاً في الثانية، من البداية إلى النهاية
بعد النقل
كل صف في المصدر محسوب: حُمّل، أو ضُمّ إلى مطعمه أو زيارته، أو وُضع جانباً وعُدّ.
المجاميع الاختبارية المحسوبة على المصدر وعلى الوجهة متطابقة.
لكل تفتيش مطعمه، ولكل مخالفة تفتيشها.
كل قيمة حُمّلت حُوّلت إلى نوعها دون أي خطأ.
اختبرنا التشغيل نحن أيضاً
التجربة تهدف إلى كشف المشكلات قبل أن تكون بيانات عميل معنية. وهذه كشفت خمسة في سلسلتنا، وأُصلح كل منها في اليوم نفسه وأُضيف إلى قائمة الفحص التي نمرّ عليها قبل كل ترحيل.
تعمل مراجعة تلقائية بعد كل ترحيل. كانت تبدأ ثم تتوقف دون أي كلمة، بسبب ثلاثة أخطاء إعداد منفصلة. أُصلحت الثلاثة، وصارت المراجعة تكتمل الآن.
بالنسبة إلى العميل: ترحيل بلا مراجعة خلفه، دون أن يعلم أحد.
كانت تبحث عن المعلومات بأسماء تغيّرت منذ ذلك الحين، فكانت نتائجها ستكون ناقصة. فُحص كل بحث مقابل النظام كما هو فعلاً.
بالنسبة إلى العميل: تقرير يُغفل أشياء دون أن يقول ذلك.
إعادة تشغيل المراجعة على ترحيل منتهٍ سجّلت أرقاماً أسوأ ونبّهت إلى أربع مشكلات غير موجودة. صارت تتعرّف الآن على مهمة سبق قياسها.
بالنسبة إلى العميل: وقت ضائع في ملاحقة مشكلات غير موجودة.
كانت فحوص الأمان التي تسبق الترحيل تحتاج أداة مفقودة، فلم تعمل ستة من عشرة أبداً، ولهذا يُظهر التقرير 4 من 10. أُعيد بناؤها كي لا تعتمد عليها بعد الآن.
بالنسبة إلى العميل: بدء ترحيل بحماية أقل مما وُعد به.
طُلب من أتمتتنا استخدام عنوان ذكرته وثائقنا لكن الخدمة لم تكن تستخدمه. صُحّحت الوثائق.
بالنسبة إلى العميل: عدم تطابق صغير قد يعطّل ترحيلاً في ليلته.
من PostgreSQL إلى PostgreSQL على عنقود Kubernetes الخاص بنا (16 vCPU و32 غيغابايت)، في 28 و29 مارس 2026. حُمّل المصدر من ملف CSV العام للمدينة، واستُخرج بموصل، ثم أُزيل التكرار وحُوّلت الأنواع ورُبطت الجداول بمفاتيح خارجية عبر SQL في الوجهة. قارن التحقق أعداد الصفوف والمجاميع الاختبارية بالمصدر وفحص المفتاحين الخارجيين بحثاً عن سجلات يتيمة. أُعيد بناء سلسلتنا منذ ذلك الحين؛ وتعرض هذه الصفحة التشغيل كما قيس.
نجرّبه أولاً على نسخة من بياناتك، وتوافق أنت قبل أن ينتقل أي شيء إلى بيئة الإنتاج.
احجز مكالمة