ما هو الفرق بين نظامي ادارة قواعد البيانات (MySQL) و (PostgreSQL)؟

في العالم الرقمي الذي نعيش فيه، تتدفق المعلومات والبيانات حولنا كسلاسل من الأرقام والرموز والحروف. كما أصبحت حياتنا أشبه بمجموعة من قواعد البيانات التي تربط كل شيء من حولنا ببعضه. ترتبط قواعد البيانات هذه بدورها بغيرها أكبر او أصغر حجما. وإذا ألقينا نظرة حولنا، لرأينا احجامها المهولة. كيف تتم إدارة هذا الكم الهائل من البيانات؟ ولماذا نقوم بإدارته اصلا؟ ما هو (MySQL)؟ وما هو (PostgreSQL)؟ وايهما أفضل؟

في هذا المقال، سوف نجيب عن كل هذه التساؤلات، اضافة الى تغطية المقارنة بينهما من الجوانب التالية:

قبل البدء في التعرف على لغة (SQL) بشكل أكثر دقة، والمقارنة بين كل من (MySQL) و (PostgreSQL) دعونا نمر اولا على بعض المعلومات المهمة في هذا النطاق:

 قواعد البيانات (Databases)

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

نظم ادارة قواعد البيانات (Database Management Systems/DBMS)

ظهرت الحاجة إلى أداره البيانات الضخمة بشكل واضح جدا، في البرمجة. وفي هذا المجال، يعود الفضل الى السيد تشارلز باتشمان الذي اخترع عام 1960 أول نظام محوسب لإدارة قواعد البيانات. تمكن هذه البرامج الحاسوبية المستخدمين من الوصول إلى قواعد البيانات ومعالجه محتوياتها من بيانات، فضلا عن مساعدتهم في عمليات تمثيل تلك البيانات لجعلها متاحه لمستخدمين متباعدين في وقت واحد (مثل دليل الهاتف الالكتروني). بعابرة تقنية أكثر، يمكن القول ان نظم ادارة قواعد البيانات يمكنها (انشاء وقراءة وتحديث وحذف) البيانات داخل قواعد البيانات، العمليات التي يشار اليها باسم (C.R.U.D).

تعمل نظم ادارة قواعد البيانات بطرق مختلفة:

  1. نظام ادارة قواعد بيانات بنائي (Hierarchical DBMS): وهذا النوع يخزن ويعالج البيانات بشكل شجري، حيث يتم تخزين كل عنصر من محتويات قاعدة البيانات في حقل (field) خاص به، ثم يتم ربط هذه الحقول مع بعضها البعض لتشكل سجل أكبر (record). ينتج عن هذه العملية قاعده بيانات شجرية (Database-Tree) تحتوي على سجلات، يرتبط كل منها بسجل أصل واحد أكبر والعديد من الحقول الأصغر. على اية حال، لم يعد هذا النوع دارج الاستخدام في الوقت الحاضر.

A screen shot of a computer Description automatically generated

  1. نظام ادارة قواعد بيانات شبكي (Network DBMS): هذا النوع يخزن ويعالج البيانات بشكل شجري ايضا، ولكنه يختلف عن نظام ادارة قواعد البيانات البنائي (HDBMS) في انه يسمح لكل سجل في قاعدة البيانات بالارتباط بسجلات اخرى متعددة، مما يضيف المزيد من المرونة والفاعلية لعملية تخزين البيانات ومعالجتها. بعبارة اخرى يدعم هذا النوع علاقة المتعدد الى المتعدد (M-TO-M Relationship).

  1. نظام ادارة قواعد بيانات كائني التوجه (Object Oriented DBMS): على خلاف كافة النظم التي ذكرناها فهذا النوع لا يتعامل مع البيانات على شكلها المفصل. كيف إذا؟ حسنا، الأمر بسيط جدا، يتعامل نظام ادارة قواعد البيانات الكائني التوجه (OODBMS) مع البيانات على انها كائنات (صور، اشكال، جداول، او بيانات بسمات وتخصيصات معينة) لتحديد عملية المعالجة اللازمة لكل نوع – مع بعض القيود في حالات معينة – وبهذا يكون الفرق في ان انواع النظم الأخرى تعمل على تخزين وتنميط البيانات على شكل أقرب الى جداول متشابكة حسب التشابهات بينها. ويعتبر (PostgreSQL) مثالا شهيرا على هذا النوع.

 

  1. نظام ادارة قواعد بيانات علائقي (Relational DBMS): وهو الأشهر والأوسع انتشارا عالميا، حيث يعمل هذا النوع على تخزين البيانات في جداول مترابطة ببعضها البعض حسب علاقاتها ببعضها البعض وليس تشابهها. يجدر هنا الإشارة الى ان استخدام هذا النوع، يجب ان يكون مرفقا بتصنيف وتحديد مرفق للبيانات قبل تخزينها في قاعدة البيانات، والسبب في ذلك ان هذا النوع لا يدعم علاقة المتعدد الى متعدد التي تحدثنا عنها سابقا (M-TO-M). ومن الأمثلة على هذا النوع (MySQL) و (Microsoft SQL Server) و (Oracle).

A close up of a computer Description automatically generated

لغة الاستعلامات البنيوية (Structured Query Language/SQL)

من كل ما سبق، يمكنك استنتاج ان لغة الاستعلامات البنيوية (SQL) هي اللغة الأساسية التي تعمل من خلالها كل نظم ادارة قواعد البيانات العلائقية (RDBMS). أي انها لغة البرمجة التي يستخدمها المبرمجون في التعامل مع قواعد البيانات وتنفيذ اوامر مثل الإدخال والبحث والتحديث والحذف (C.R.U.D) على كل محتوياتها.

كل من (MySQL) و (PostgreSQL) هي نظم ادارة قواعد بيانات علاقية مفتوحة المصدر (Open Source RDMS)، تتخذ من (SQL) لغة استعلام رسمية للتعامل مع قواعد البيانات التي يديرانها. الأول (MySQL) من انتاج شركه اوراكل. والثاني (PostgreSQL) من انتاج المجموعة العالمية للمطورين (GDG).

يجدر بنا هنا تنبيهك، الى ان بعض نظم ادارة قواعد البيانات قد تكون مدعومة للعمل باثنتين من طرق بناء قواعد البيانات التي ذكرناها، فمثلا (PostgreSQL) هو نظام ادارة قواعد بيانات علائقي كائني التوجه (R-OO-DBMS)، ويمكنه التعامل مع البيانات في شكلها كبيانات مجدولة مترابطة حسب علاقاتها الى جانب شكلها الكائني (صور واشكال وما الى ذلك.)

لنبدأ الآن في مقارنتنا:

 

  • أداء قواعد البيانات

بما ان اداء قاعدة البيانات يعد امرا مهما جدا، يجدر بنا هنا ان نتفق معكم على عدم وجود الكثير من الاختلاف بين أداء قواعد البيانات التي تعمل مع (MySQL) والتي تعمل مع (PostgreSQL)، وخصوصا في الإصدارات الحديثة لكلاهما. ولكن وجبت الإشارة الى ان كون (PostgreSQL) نظام ادارة قواعد بيانات علائقي وكائني التوجه في نفس الوقت (R-OO-DBMS) فهذا يمنحه بعض الأفضلية على نظام الإدارة (MySQL) والذي يعد نظام علائقي فقط (R-DBMS). وهذا يعني امتلاك الأول لإمكانيات اضافية مثل معاملة الجداول من استعلام وتخزين، على انها كائنات مستقلة.

يجدر بك ايضا، معرفة ان نظام (PostgreSQL) يدعم آلية للتحكم في تزامن الإصدارات المتعددة من البيانات (Multi-Version Concurrency Control/ MVCC) والذي يمنع عرض انصاف البيانات او اجزاء مبعثرة منها، إذا حاول القارء تصفح محتويات قاعدة البيانات في نفس الوقت الذي يقوم المبرمج فيه بإدخال او تعديل البيانات فيها. يمنح هذا النموذج بعضا من الأفضلية لنظام (PostgreSQL) على نظام (MySQL) فيما يخص التعامل مع تزامن البيانات. الى جانب كل ذلك، يعتبر نظام (PostgreSQL) أقرب وأكثر تشبثا بقواعد (SQL) الرسمية، التي قد ابتعد (MySQL) كثيرا عنها حاليا.

على اية حال، كلاهما يمتلك سمعة ممتازة من حيث سرعة التعامل مع قواعد البيانات الضخمة. ولكن في (MySQL) قد تكون تلك السرعة احيانا، على حساب جودة عملية التزامن (Concurrency).

يعرض الجدول التالي بعض المميزات الرئيسية التي ساهمت في تقليص الفجوة بينهما من حيث أداء قواعد البيانات (DB Performance).

كما ترى، عند الاختيار بين نظامي ادارة قواعد البيانات (MySQL) و(PostgreSQL), لا يمكن اعتبار اداء قاعدة البيانات التي ستعمل مع اي منهما امرا مهم في تحديد ايهما سوف تستخدم.

  • انواع البيانات المدعومة

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

  • لغات البرمجة المدعومة

اختيار نظام ادارة قواعد البيانات الذي سوف تستخدمه مع قاعدة بيانات معينة، يجب بكل تأكيد ان يكون مرتبط بنوع لغة البرمجة التي تستخدمها في بناء قاعدة البيانات المقصودة. حيث ان بعض نظم ادارة قواعد البيانات بنيت من الأساس للعمل مع لغات برمجة معينة بأقصى كفاءتها. يعتمد ذلك في المقام الأول، على لغة البرمجة التي استخدمت في كاتبة وبرمجة نظام ادارة قواعد البيانات، ولكن ليس دائما. حيث انه وبالرغم من ان نظام (MySQL) قد كتب بغلتي (C وC++) ونظام (PostgreSQL) قد كتب بلغة (C) الا انه لا يزال هناك فرق ملحوظ في اللغات التي تدعمانها بشكل مستقر. في الجدول التالي دليل كامل بكل اللغات التي يقدم كل منهما الدعم الكامل “المستقر” لها:

  • انظمة التشغيل المدعومة

قد يشكل نظام التشغيل الذي تستخدمه عاملا مهما في اختيارك أيضا. حيث قد لا تعمل بعض تلك النظم نهائيا مع بعض أنظمة التشغيل. يوضح الجدول التالي معظم أنظمة التشغيل الشائعة وقابلية عمل كل من نظامي ادارة قواعد البيانات (MySQL) و (PostgreSQL) معها.

  • حالات الاستخدام

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

  1. إذا كنت توشك على البدء في تطوير مشروع جديد من الصفر وبناء قاعدة جديدة لبياناته، وتخطط مستقبلا الى التطوير الى خيار مغلق المصدر وأكبر دعما مثل أوراكل، فعليك اختيار (PostgreSQL). ولسبب بسيط، حيث وعلى الرغم من ان (MySQL) من انتاج شركة أوراكل، الا ان (PostgreSQL) يقدم دعما أفضل للكثير من الخصائص التي تقدمها أوراكل، خصوصا في بيئة مفتوحة المصدر. ونتيجة لذلك، فكل كود تقوم بكتابته لـ (PostgreSQL) ستتمكن من نقله بكل سهولة الى أوراكل لاحقا. اما (MySQL) فقد انفصل حاليا بشكل كبير جدا عن معايير (SQL) الرسمية، وأصبح هناك اختلاف كبير في طريقة تعامله مع الكثير من الاستعلامات داخل قاعدة البيانات (Database Queries)، لذلك قد تواجه بعض المشاكل عندما تقرر الترقية الى اوراكل.
  2. اما إذا كنت تحاول تشغيل او تعديل مشروع منجز بالفعل تم بنائه بالأساس للتوافق مع (MySQL) ففي هذه الحالة، يعد اختيار (PostgreSQL) امرا غير منطقي ابدا.
  • الأمان والحماية

معايير الأمان والحماية في نظام ادارة قواعد البيانات مهمة جدا في اختياره. حيث انها تؤثر بشكل رئيسي على درجة امان البيانات المخزنة في قاعدة البيانات وأي نظام او برنامج يرتبط معها. وكلما زادت درجات أمان نظام ادارة قواعد البيانات الخاص بك، كلما اصبحت قاعدة بياناتك بعيدة عن اي تهديد كالاختراق او التجسس.

في نظام (MySQL) لإدارة قواعد البيانات يعتبر عامل الأمان والحماية مهم جدا، حيث يوفر النظام طبقات متعددة متقدمة جدا من خيارات الحماية. فهو ينفذ بروتوكولات الأمان (Security Protocols) استنادا إلى قوائم التحكم بالوصول (Access Control Lists) للعمليات التي يقوم بها المستخدم مثل التوصيلات والاستعلامات (Connections & Queries). اما في (PostgreSQL) فالأمر مختلف قليلا، فهو يقدم اتصال مشفر من تلقاء نفسه، “هذا الخيار موجود في (MySQL)، ولكنه غير تلقائي” بعكس (PostgreSQL) فهو تلقائي وتعرف هذه الخاصية باسم (Native SLL Support). الى جانب ان (PostgreSQL) يحتوي تعزيز أمني اضافي يعرف باسم (SE-PostgreSQL) والذي يعتمد على مزود الأمان الخاص بلينكس (SE-Linux) في تقديم المزيد من عناصر التحكم في الوصول الآمن في قواعد البيانات.

  • مدى التوافق مع المعايير الرسمية للغة (SQL)

مطابقات (SQL) او (SQL Compliance) هي قائمة طويلة، بكل المعايير الواجب المحافظة عليها اثناء العمل على قاعدة بينات باستخدام لغة (SQL). وهي مفيدة جدا في حال حاول المطور استخدام نظام ادارة البيانات (DBMS) في ادارة قواعد بيانات غير متجانسة (Heterogeneous Databases) لنفس المشروع.

نظام ادارة قواعد البيانات (PostgreSQL) يتوافق مع المقاييس الرسمية لـ (SQL) بشكل أكبر من (MySQL). حيث يتوافق الأول مع 160 خاصية مهمة من أصل 179 من منها. اضافة الى خصائص وامكانات اضافية. من الناحية الأخرى، لا يتوافق (MySQL) مع تلك المعايير والمطابقات بشكل كبير، ولكنه يوفر بعض الميزات الاضافية المفيدة غير التابعة للغة (SQL) اصلا. على اية حال، يمكنك معرفة اي المطابقات يتوافق كل منهما معها من خلال الرابط التاليWikiSQL compliance”، والذي يعرض جميع مطابقات ومعايير (SQL) ودرجة توافق كل نظم ادارة قواعد البيانات معها:

  • التبني من قبل كبرى الشركات العالمية

لتقييم اداء اي من نظم ادارة قواعد البيانات، لا يوجد مكان أفضل من اختباره مع قاعدة بيانات ضخمة جدا. ولكن اين نجد احداها؟ في الشركات الكبرى بكل تأكيد. هنا، جمعنا لكم بعض من أكبر الشركات العالمية التي تملك أكبر قواعد للبيانات في مجال التكنولوجيا حتى هذه اللحظة، والتي اعلنت رسميا عن اعتمادها على احدى نظم ادارة قواعد البيانات (MySQL) أو (PostgreSQL).

بالحديث عن الشركات الكبرى ايضا، فقد أعلنت اوبر، إحدى أكبر شركات النقل في العالم، عام 2016 عن انتقالها من الاعتماد على (PostgreSQL) كنظام ادارة البيانات الرسمي لها منذ اطلاقها عام 2010 إلى (MySQL) بسبب محدودية معمارية النظام الأول ( Postgres Architecture limitations) كما وصف مهندسوها.

  • الدعم المتوفر

بكل تأكيد يجب اخذ الدعم المتوفر لكل منهما بعين الاعتبار عند الاختيار. حيث وعلى الرغم من ان كل من (MySQL)و (PostgreSQL) قد صدرا في نفس الفترة؛ (MySQL) في 1995 و (PostgreSQL) في 1996، الا ان الاول لا يزال نظام إدارة قواعد البيانات الأكثر استخداما حول العالم لأسباب عدة.

لنأخذ ملخص تاريخيا قصيرا:

صمم (MySQL) في البداية من قبل مايكل وايدنيس وديفيد اكس مارك وآلان لارسون “لاستخدامهم الشخصي” في ذلك الوقت. وبسبب نجاحه المبهر، نمت شكرتهم بسرعة كبيرة جدا. حتى 2008، وقت ان تملكتها شركه صن ميكرو سيستمز مقابل مليار دولار أمريكي. بعد عامين، في عام 2010 بيعت شركة صن ميكرو سيستمز لشركة اوراكل. وكان هذا كفيلا، بتكثيف عمليات الترويج والنشر لـ (MySQL). حيث عملت اوراكل على اشهار ونشر (MySQL) حتى يصل الى كل مبرمج حول العالم، وكان هدفها حسب وصفهم بان “يعرف بوجوده كل مبرمج حول العالم حتى ولو لم يستخدمه” وبالطبع نجحوا في ذلك.

اما (PostgreSQL) التابع لشركة (GDG)، فلم يحصل على ذاك المقدار من الشهرة حتى وقت متأخر جدا عن ذلك. ونتيجة لذلك، لم يتمكن من جمع قدر كبير من أدوات الطرف الثالث (3rd Party Tools) أو المطورين الداعمين او مسؤولي قواعد البيانات المتوفرة.

إذا، فبلا اي شك يملك (MySQL) الصدارة فيما يخص الدعم المتوفر، على سبيل المثال (MySQL Developer Zone) والذي توفر لك مجموعه كبيره ومتنوعة من الموارد المجانية، من مستندات وأدلة الخوادم والدروس والمقالات المتعلقة تقريبا بكل ما تحتاجه. كما تقدم شركة أوراكل المالكة لـ (MySQL) عدد لا يستهان به من الدورات والتدريبات “اونلاين” بشهادات رسمية معترف بها دوليا، منها دورات ادارة قواعد البيانات (Database Administration) ودورات تطوير قواعد البيانات (Database Development) الى جانب امكانية ايجاد الكثير والكثير من المصادر الأخرى على الإنترنت لتعلم كل ما قد تحتاجه عن (MySQL).

في الجهة الأخرى، يملك (PostgreSQL) العديد من مجموعات الدعم (local PostgreSQL User Groups) لتقديم المحتوى والأدوات المساعدة، ولكنها ليست بالقدر الذي قد تجده مع (MySQL).

  • النقاط المهمة

  1. قاعدة البيانات (DB): اي مجموعه من المعلومات ذات الصلة ببعضها هي قاعده بيانات.
  2. نظم ادارة قواعد البيانات (DBMS): برامج حاسوبية تمكن المستخدمين من الوصول إلى قواعد البيانات ومعالجه محتوياتها من بيانات. تعمل نظم ادارة قواعد البيانات بطرق مختلفة: نظام ادارة قواعد بيانات بنائي (Hierarchical DBMS)، نظام ادارة قواعد بيانات شبكي (Network DBMS)، نظام ادارة قواعد بيانات كائني التوجه (Object Oriented DBMS)، نظام ادارة قواعد بيانات علائقي (Relational DBMS).
  3. لغة الاستعلامات البنيوية (SQL) هي اللغة الأساسية التي تعمل من خلالها كل نظم ادارة قواعد البيانات العلائقية (RDBMS).
  4. لا يوجد الكثير من الاختلاف بين أداء قواعد البيانات التي تعمل مع (MySQL) والتي تعمل مع (PostgreSQL)، وخصوصا في الإصدارات الحديثة لكلاهما.
  5. يملك (PostgreSQL) قابلية أكبر في التوسع في انواع البيانات المدعومة، حيث يدعم العديد من الأنواع التي لا يدعمها (MySQL) او لا يدعهما بشكل مستقر.
  6. بالرغم من ان نظام (MySQL) قد كتب بغلتي (C وC++) ونظام (PostgreSQL) قد كتب بلغة (C) لا يزال هناك فرق ملحوظ في اللغات التي تدعمانها بشكل مستقر. (الق نظرة على الجدول رقم 3).
  7. يعد نظام التشغيل الذي تستخدمه عاملا مهما في اختيارك لنظام ادارة قواعد البيانات. قد لا تعمل بعض نظم ادارة قواعد البيانات بشكل كامل او بشكل مستقر مع بعض انظمة التشغيل (الق نظرة على الجدول رقم 4).
  8. غالبا ما سيقترح عملائك نوع نظام ادارة قواعد البيانات الذي يرغبون في استخدامه مع قواعد بياناتهم، ولكن إذا اضطررت للاختيار فـ (PostgreSQL) يعد خيار أفضل إذا كنت ترغب في التطوير الى خيار أكثر تطورا لاحقا، مثل اوراكل. ولكن ليس في حالة كنت ترغب في تشغيل او التعديل في نظام تم اعداداه مسبقا للعمل مع (MySQL).
  9. عامل الأمن والحماية مهم جدا في نظام (MySQL)، كما يوفر النظام طبقات متعددة متقدمة جدا من خيارات الحماية. اما (PostgreSQL) فهو مختلف قليلا. فهو يقدم اتصال مشفر من تلقاء نفسه، “هذا الخيار موجود في (MySQL)، ولكنه غير تلقائي” اما في (PostgreSQL) فهو تلقائي وتعرف هذه الخاصية باسم (Native SLL Support).
  10. يتوافق (PostgreSQL) مع المقاييس الرسمية لـ (SQL) بشكل أكبر من (MySQL) حيث يتوافق الأول مع 160 خاصية مهمة من خصائص (SQL). (الق نظرة على هذا المقال من ويكيبيدياWiki).
  11. الق نظرة على الجدول رقم 5 لتتعرف على كبرى الشركات العالمية التي تستخدم كل منهما كنظام ادارة قواعد بياناتها.
  12. يقدم (MySQL) دعما أكبر من الجمهور والمطورين حول العالم.

 

شكرا على القراءة وآمل ان تكون قد وجدت معلومات مفيدة في مقالتي.

لا تنسى مشاركتها إذا اعجبتك.

 

 

 

 

 

LEAVE A REPLY

Please enter your comment!
Please enter your name here