Haithem Nini
رجوع إلى المدونة

26 سبتمبر 2026 · 5 دقيقة قراءة

كيف بنيت نظام البحث في Badilk

فكرة Badilk بسيطة: تبحث عن هاتفك، نعرض لك قطع الغيار المتوافقة معه. التحدي الحقيقي كان الحصول على بيانات دقيقة ومحدّثة للتوافق.

فكرة Badilk بسيطة: تبحث عن هاتفك، نعرض لك قطع الغيار المتوافقة معه. الجزء الصعب لم يكن التطبيق نفسه، بل البيانات التي خلفه — من أين نحصل على معلومات دقيقة عن توافق القطع مع كل هاتف؟

لا توجد قاعدة بيانات جاهزة لهذا الغرض. لا أحد ينشر "هذه البطارية تناسب هذا الطراز" بشكل منظّم. أغلب المواصفات موجودة في مواقع مثل GSMArena، لكنها موزّعة على آلاف الصفحات، مكتوبة ليقرأها الإنسان، وليس ليقرأها برنامج.

فقبل أن نبني التطبيق، كان علينا أولًا بناء نظام يقرأ هذه البيانات تلقائيًا، ويبقيها محدّثة، ولا ينهار كل مرة يغيّر فيها الموقع المصدر شيئًا بسيطًا.

لماذا لا نجمع البيانات مرة واحدة ونكتفي بذلك

أول فكرة خطرت لي كانت جمع البيانات مرة واحدة والانتهاء من الأمر. هذا لا يصلح، لأن هواتف جديدة تصدر كل أسبوع تقريبًا. أي كتالوج لا يُحدَّث يصبح قديمًا بسرعة. لذلك كان لا بد أن يكون هذا نظامًا يعمل باستمرار، وليس مهمة تُنجز مرة واحدة.

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

كيف يعمل النظام، بكلام بسيط

بنيت النظام على شكل أجزاء واضحة:

  • لا يتسرّع. يبطّئ نفسه تلقائيًا إن لاحظ أخطاء أو استجابة بطيئة، بدل أن يضغط على الموقع المصدر باستمرار.
  • يوزّع طلباته بدل أن يبدو كمصدر واحد يهاجم الموقع بشكل متكرر.
  • يتحقق فقط مما قد يكون تغيّر، بدل إعادة قراءة كل شيء من الصفر في كل مرة. هذه النقطة وحدها قلّصت وقت التحديث من ساعات إلى دقائق.
  • يتذكّر ما يعرفه مسبقًا، فلا يضيّع وقتًا في إعادة جلب صفحات لم تتغيّر.
  • يتوقف من تلقاء نفسه عندما يشعر أن شيئًا خاطئًا يحدث. إن غيّر الموقع المصدر تصميمه وأصبحت البيانات القادمة غير منطقية، يوقف النظام نفسه وينبّه بدل أن يحفظ بيانات فاسدة بصمت.

هذه النقطة الأخيرة جاءت من تجربة فعلية. في البداية، مرّ تغيير بسيط في تصميم الموقع المصدر دون أن ينتبه له أحد لمدة يوم كامل تقريبًا، وتطلّب الأمر جهدًا حقيقيًا لتصحيح ما حدث. هذا الخطأ بالتحديد هو سبب وجود هذه الميزة الآن.

لماذا يهم هذا للمنتج

كل هذا غير مرئي لمن يستخدم تطبيق Badilk. ما يراه المستخدم هو بحث يعمل فعليًا، بنتائج محدّثة ودقيقة. هذا هو الهدف كله — العمل الذي لا يراه أحد هو ما يجعل الجزء الذي يراه الجميع يبدو موثوقًا.

على مستوى الباك إند، بعد تخزين البيانات، كان البحث السريع فيها تحديًا بحد ذاته. الناس يكتبون أسماء الهواتف بطرق مختلفة — أسماء ناقصة، أخطاء إملائية، أو حروف عربية مكتوبة بالإنجليزية. الحصول على نتائج بحث سريعة، حتى مع كتالوج متنامٍ، تطلّب عملًا حقيقيًا على طريقة تنظيم فهارس النصوص في قاعدة البيانات.

ماذا كنت سأفعل بشكل مختلف

لو أعدت بناء هذا النظام اليوم، كنت سأصمم آليات الحماية أولًا، وليس بعد أن يحدث خطأ. هكذا يسير الأمر عادة — لا تعرف بالضبط ممّ تحمي نفسك إلا بعد أن تتعلّم الدرس مرة واحدة. النظام يعمل جيدًا الآن، لكن هذا لأن قائمة محددة من الأخطاء حدثت أولًا وتعلّمت منها.

Haithem Nini هو المؤسس الشريك والمدير التقني لمنصة Badilk، المتخصصة في توافق قطع غيار الهواتف للسوق الجزائري والعربي.

.NET 8PostgreSQLAutomation

عندك مشروع مشابه؟

أخبرني بالمشروع الذي تعمل عليه وبالنتيجة التي تريدها.