MongoDB إلى Postgres
ما هو موضوع هذا؟
أثناء إجراء مقابلة للحصول على وظيفة في شركة، طُلب مني الإجابة على السؤال التالي: هل يمكنك وصف أصعب مشكلة حلّتها؟ باختصار، أصعب مشكلة حلّتها حدثت أثناء عملي في eBay، حيث قمت بترحيل أحد المشاريع الداخلية الكبيرة في eBay من استخدام MongoDB إلى Postgres خلال عام 2023. ومع ذلك، جعلني هذا السؤال أفكر بعمق في كيفية حلّ هذه المشكلة الصعبة وأتاح لي فرصة التأمل في رحلتي كمطور. نتيجةً لذلك، كتبت ردًا مفصلاً وشاملًا على ذلك السؤال، وأردت مشاركة ردي على موقعي.
ما هو السؤال؟
هل يمكنك وصف أصعب مشكلة حلّتها؟ يرجى الرد بأقل من 4 فقرات وإخبارنا بـ:
- ما قمت به
- ما الذي جعله صعبًا
- ما تعلمته من هذه التجربة
- كيف نمت نتيجة لذلك
ما هو ردي؟
1 - ما قمت به
حاليًا، في مسيرتي المهنية، أصعب مشكلة حلّتها حدثت أثناء عملي في منصبي الحالي في eBay. في eBay، حيث أعمل بموجب عقد مع Hitachi Vantara، أقوم بتطوير وصيانة أداة داخلية تُدعى نظام إدارة التخزين أو STMS. يُستخدم STMS من قبل فريق البنية التحتية للخدمات والتخزين (SSI) في eBay لمراقبة وإدارة الأجهزة عبر مراكز بيانات eBay. يتيح STMS للمهندس مراقبة مقاييس العديد من المصفوفات، والمحولات، والمضيفين، ومجموعات الأقراص، والعنقودات، وقواعد البيانات. كما يتعامل مع تنبيهات المحولات والمصفوفات ويسمح بسهولة للمهندس بإكمال مهام متقدمة مثل تخصيص المضيفين. يستهلك STMS أكثر من 1.5 مليون مقياس في الدقيقة، ويغطي عشرات/مئات المصفوفات، والمحولات، والمضيفين، ومجموعات الأقراص، والعنقودات عبر مراكز بيانات eBay. إنه أداة حيوية لفريق SSI لمراقبة وإدارة بنية التخزين في eBay، والتي تُعد أساسية لخدمة eBay الأساسية ونموذج أعمالها. بناءً على كل ذلك، كانت أصعب مشكلة اضطررت لحلها خلال فترة عملي في eBay هي ترحيل STMS من استخدام قاعدة بيانات MongoDB إلى استخدام قاعدة بيانات Postgres.
2 - ما الذي جعله صعبًا
ما جعل هذه المشكلة صعبة هو أن MongoDB وPostgres قواعد بيانات مختلفة جوهريًا. MongoDB هي قاعدة بيانات مستندة إلى المستندات (NoSQL)، مما يعني أن البيانات تُخزن كـ JSON في مجموعة (مثل المستندات في خزانة ملفات)، بينما Postgres هي قاعدة بيانات علائقية (SQL)، مما يعني أن البيانات تُخزن كصفوف في جدول (مثل جدول بيانات). بالإضافة إلى ذلك، تم بناء جميع خلفية STMS لمعالجة وإدارة البيانات كـ JSONs، باستخدام حزم متوافقة حصريًا مع MongoDB لعمليات قاعدة البيانات. أيضًا، أثناء تنفيذ هذا الترقي، كان لا بد من عدم وجود أي توقف (downtime) ويجب أن تستمر تقريبًا جميع الميزات في العمل بسبب أهمية STMS كأداة داخلية. كان يجب إكمال هذا الترقي بالكامل خلال بضعة أشهر، دون أي توقف، ودون وجود خطة واضحة لتنفيذه. لم يكن لدي خبرة كبيرة مع Postgres مسبقًا، وكذلك لم يكن لدى زملائي أي خبرة في ترحيل قاعدة شفرة قديمة كبيرة من قاعدة NoSQL إلى قاعدة SQL.
3 - ما تعلمته من هذه التجربة
تم إكمال ترحيل كود STMS من MongoDB إلى Postgres بنجاح دون أي توقف، مع الحفاظ على تقريبًا جميع الميزات والوظائف. استلزم ذلك بحثًا مكثفًا، وتعلمًا، واختبارًا، وحلًا للمشكلات. أعدت هيكلة هياكل البيانات لدينا لتعمل بشكل أكثر فعالية مع قواعد البيانات العلائقية وطورت حزمًا جديدة لتحل محل تلك التي كنا نعتمد عليها والتي لم تكن تتكامل مع Postgres. بشكل عام، سارت عملية الترقي بسلاسة ودون أي عيوب حقيقية، مما فاق توقعاتي. طوال هذه العملية، تعلمت الكثير. من الناحية التقنية، اكتسبت فهمًا أفضل لـ Postgres، وSQL، وأشجار التحليل، وORMs، وSequelize، وPrisma، وبنّاءات الاستعلام، وفحص التكافؤ، وإعداد قاعدة البيانات الأساسية-الاحتياطية، واختبار الوحدات المتعلق بقاعدة البيانات. من الناحية الأساسية، تعلمت كيفية تقسيم مشكلة معقدة إلى أجزاء أصغر بشكل أكثر فعالية وتنفيذ حلول فعّالة لتلك الأجزاء. بالإضافة إلى ذلك، تعلمت كيف أكون قائدًا وأقود هذا المشروع إلى نهايته رغم مواجهة العديد من القيود، والنكسات، والمجهولات.
4 - كيف نمت نتيجة لذلك
بدأت مسيرتي المهنية في مجال الروبوتات خلال دراستي الجامعية، لكنني انتقلت إلى تطوير الويب عندما حصلت على وظيفة في eBay، مدخلًا إلى مجال لم يكن لدي فيه أي خبرة سابقة. وضع هذا الانتقال الأساس لمسيرة مهنية تُعرّف بالتعلم المستمر والقدرة على التكيف. كان تحدي ترحيل STMS من MongoDB إلى Postgres قفزة كبيرة في مسيرتي، وساهم بشكل كبير في نموي المهني. لم يكن الأمر مجرد تعميق فهمي لقاعدة البيانات أو تعزيز مهارات حل المشكلات. دفعني هذا المشروع إلى مجال جديد، مطالبًا بتخطيط دقيق والالتزام بعدم وجود أي توقف. من خلال قيادة الترقي دون خبرة سابقة في انتقالات قواعد البيانات على نطاق واسع، تعلمت قيمة التواصل الواضح، والعمل الجماعي، وتقسيم التحديات المعقدة إلى أجزاء يمكن إدارتها. وسّع هذا التجربة مهاراتي التقنية كما عززت ثقتي بنفسي، موجهًا إياي نحو أهداف ومشاريع أكثر طموحًا. لم يُظهر هذا الإنجاز في مسيرتي نموي كمطور وقائد فحسب، بل أيضًا كمحلل مشكلات، مظهرًا أن احتضان المجهول والنجاح فيه هو المفتاح للتطور الشخصي والمهني.
ما هو الاستنتاج؟
قادت ردودي إلى انتقالي إلى المرحلة الثانية من عملية المقابلة في الشركة، مما أتاح لي إجراء محادثة ممتعة مع أحد المطورين في الفريق، وكان ذلك لطيفًا جدًا. ولكن، في المقام الأول، سمح لي هذا الواجب بالتفكير في أصعب مشكلة تقنية حلّتها في مسيرتي خلال فترة عملي في eBay. مكنني ذلك من التفكير في نموي كمطور/مهندس، وتطوير مهارات جديدة، وتعزيز ثقتي في التكيف مع المشكلات المعقدة وحلها.