مقدمة
يسيطر نموذج البيانات العلاقوي، الذي ينظم البيانات في جداول من الصفوف والأعمدة، في أدوات إدارة قواعد البيانات. اليوم هناك نماذج بيانات أخرى، بما في ذلك NoSQL و NewSQL، ولكن أنظمة إدارة قواعد البيانات العلاقية (RDBMSs) تظل سائدة لتخزين وإدارة البيانات على مستوى العالم.
يقارن هذا المقال ويقارن بين ثلاثة من أكثر RDBMSs مفتوحة المصدر استخدامًا: SQLite و MySQL و PostgreSQL. بالضبط، سيكشف عن أنواع البيانات التي يستخدمها كل RDBMS، مزاياها وعيوبها، والحالات التي يتم فيها تحسينها بشكل أفضل.
A Bit About Database Management Systems
قواعد البيانات هي تجمعات منظمة من المعلومات، أو بيانات. نظام إدارة قواعد البيانات (DBMS)، من ناحية أخرى، هو برنامج كمبيوتر يتفاعل مع قاعدة بيانات. يسمح لك نظام DBMS بالتحكم في الوصول إلى قاعدة البيانات، وكتابة البيانات، وتشغيل الاستعلامات، وأداء أي مهام أخرى متعلقة بإدارة قاعدة البيانات.
على الرغم من أن أنظمة إدارة قواعد البيانات غالبًا ما تُشار إليها بـ “قواعد بيانات”، إلا أن الكلمتين ليست قابلتين للتبديل. يمكن أن تكون قاعدة بيانات أي مجموعة من البيانات، ليس فقط تلك المخزنة على جهاز كمبيوتر. على النقيض من ذلك، يشير نظام إدارة قواعد البيانات (DBMS) بشكل خاص إلى البرمجيات التي تتيح لك التفاعل مع قاعدة بيانات.
جميع أنظمة إدارة قواعد البيانات لديها نموذج أساسي يهيكل كيفية تخزين البيانات والوصول إليها. نظام إدارة قواعد البيانات العلاقية هو نظام إدارة قواعد بيانات يعتمد على نموذج البيانات العلاقي. في هذا النموذج العلاقي، يتم تنظيم البيانات في جداول. الجداول، في سياق نظم إدارة قواعد البيانات العلاقية، يُشار إليها بشكل أكثر رسمية باسم العلاقات. العلاقة هي مجموعة من الأزواج، والتي هي الصفوف في الجدول، وكل زوج يشترك في مجموعة من السمات، والتي هي الأعمدة في الجدول:
يستخدم معظم قواعد البيانات العلاقية لغة استعلام مهيكلة (SQL) لإدارة واستعلام البيانات. ومع ذلك، تستخدم العديد من نظم إدارة قواعد البيانات العلاقية لهجتها الخاصة من SQL، التي قد تحتوي على قيود أو توسيعات معينة. تتضمن هذه التوسيعات عادة ميزات إضافية تتيح للمستخدمين أداء عمليات أكثر تعقيدًا مما يمكنهم فعله بشكل طبيعي باستخدام SQL القياسي.
ملاحظة: يتم ذكر مصطلح “SQL القياسي” عدة مرات في هذا الدليل. يتم الحفاظ على معايير SQL بالتعاون بين المعهد القومي الأمريكي للمعايير (ANSI)، والمنظمة الدولية للتوحيد القياسي (ISO)، واللجنة الدولية للتقييس الكهربائي (IEC). عندما يشير هذا المقال إلى “SQL القياسي” أو “المعيار SQL”، فإنه يشير إلى النسخة الحالية من المعيار SQL المنشورة من قبل هذه الهيئات.
يجب ملاحظة أن المعيار الكامل لـ SQL كبير ومعقد: يتطلب الامتثال الكامل لـ SQL:2011 للنواة 179 ميزة. وبسبب ذلك، لا تدعم معظم أنظمة إدارة قواعد البيانات العلاقية المعيار بأكمله، على الرغم من أن بعضها يقترب أكثر من غيرها من الامتثال الكامل.
أنواع البيانات والقيود
يتم تعيين نوع بيانات لكل عمود والذي يحدد أي نوع من القيم المسموح بها في ذلك العمود. تقوم أنظمة إدارة قواعد البيانات العلاقية المختلفة بتنفيذ أنواع بيانات مختلفة، والتي لا تكون دائمًا قابلة للتبديل مباشرة. تشمل بعض الأنواع الشائعة تواريخ وسلاسل وأعداد صحيحة ومنطقية.
تخزين الأعداد الصحيحة في قاعدة بيانات يتطلب مزيدًا من التفاصيل مقارنة بوضع الأرقام في جدول. يمكن أن تكون أنواع البيانات الرقمية إما موقعة، مما يعني أنها يمكن أن تمثل كل من الأعداد الإيجابية والسلبية، أو غير موقعة، مما يعني أنها يمكن أن تمثل فقط الأعداد الإيجابية. على سبيل المثال، يمكن أن يحتوي نوع بيانات tinyint
في MySQL على 8 بتات من البيانات، مما يعادل 256 قيمة ممكنة. يتراوح نطاق القيم الموقعة لهذا النوع من -128 إلى 127، بينما يتراوح نطاق القيم غير الموقعة من 0 إلى 255.
القدرة على التحكم في البيانات المسموح بها في قاعدة بيانات مهمة. في بعض الأحيان، سيفرض مسؤول قاعدة بيانات قيدًا على جدول لتحديد القيم التي يمكن إدخالها فيه. ينطبق القيد عادة على عمود معين، لكن يمكن أن تنطبق بعض القيود أيضًا على جدول بأكمله. فيما يلي بعض القيود التي يتم استخدامها بشكل شائع في SQL:
فريدة
: تطبيق هذا القيد على عمود يضمن أن لا يتم تكرار أي اثنين من الإدخالات في ذلك العمود.غير مسموح بالقيم الفارغة
: يضمن هذا القيد أن العمود لا يحتوي على أي قيمNULL
.المفتاح الأساسي
: يضمن مزيج منفريدة
وغير مسموح بالقيم الفارغة
، و يضمن القيدالمفتاح الأساسي
أن لا تكون أي إدخالات في العمود هيNULL
وأن كل إدخال متميز.المفتاح الأجنبي
: هو عمود في جدول واحد يشير إلىالمفتاح الأساسي
في جدول آخر. يستخدم هذا القيد لربط جدولين معًا. يجب أن تكون الإدخالات في العمودالمفتاح الأجنبي
موجودة بالفعل في العمود الأمالمفتاح الأساسي
من أجل أن ينجح عملية الكتابة.التحقق
: يحد هذا القيد من نطاق القيم التي يمكن إدخالها في عمود ما. على سبيل المثال ، إذا كان تطبيقك مخصصًا فقط لسكان ألاسكا ، فيمكنك إضافة قيدالتحقق
على عمود الرمز البريدي للسماح فقط بالإدخالات بين 99501 و 99950.
إذا كنت ترغب في معرفة المزيد عن أنظمة إدارة قواعد البيانات، تفضل بزيارة مقالتنا حول مقارنة بين أنظمة إدارة قواعد البيانات غير العلائقية والنماذج.
الآن بعد أن تناولنا أنظمة إدارة قواعد البيانات العلائقية بشكل عام ، دعونا ننتقل إلى أول ثلاث قواعد بيانات علائقية مفتوحة المصدر سنغطيها في هذه المقالة: SQLite.
SQLite
SQLite هو نظام إدارة قواعد البيانات العلائقية (RDBMS) المعروف بأنه مستقل ذاتياً، يعتمد على الملفات، ومفتوح المصدر بالكامل، ومعروف بقابليته للنقل، والموثوقية، والأداء القوي حتى في بيئات الذاكرة المنخفضة. تتوافق عملياته على مبادئ ACID، حتى في حالات انهيار النظام أو انقطاع التيار الكهربائي.
يصف موقع مشروع SQLite القاعدة بأنها قاعدة بيانات “بدون خادم”. يتم تنفيذ معظم محركات قواعد البيانات العلائقية على شكل عملية خادم حيث يتواصل البرامج مع الخادم المضيف من خلال تواصل بين العمليات يقوم بإرسال الطلبات. على النقيض من ذلك، يسمح SQLite لأي عملية تصل إلى قاعدة البيانات بقراءة وكتابة ملف قاعدة البيانات مباشرةً. يبسط ذلك عملية إعداد SQLite، حيث يتم الإستغناء عن الحاجة إلى تكوين عملية خادم. بالمثل، ليست هناك حاجة لتكوين البرامج التي ستستخدم قاعدة بيانات SQLite: كل ما يلزمها هو الوصول إلى القرص.
SQLite هو برنامج مجاني ومفتوح المصدر، ولا يلزم ترخيص خاص لاستخدامه. ومع ذلك، يقدم المشروع عدة توسعات – كل منها مقابل رسم مرة واحدة – تساعد في الضغط والتشفير. بالإضافة إلى ذلك، يقدم المشروع مجموعة من حزم الدعم التجاري المختلفة، كل منها مقابل رسم سنوي.
أنواع البيانات المدعومة في SQLite
تسمح SQLite بمجموعة متنوعة من أنواع البيانات، مُنظمة في الفئات التخزينية التالية:storage classes:
Data Type | Explanation |
---|---|
null |
Includes any NULL values. |
integer |
Signed integers, stored in 1, 2, 3, 4, 6, or 8 bytes depending on the magnitude of the value. |
real |
Real numbers, or floating point values, stored as 8-byte floating point numbers. |
text |
Text strings stored using the database encoding, which can either be UTF-8, UTF-16BE or UTF-16LE. |
blob |
Any blob of data, with every blob stored exactly as it was input. |
في سياق SQLite، يُعتبر مصطلح “فئة التخزين” و “نوع البيانات” متبادلين. إذا كنت ترغب في معرفة المزيد عن أنواع بيانات SQLite وتوافق نوع SQLite، تفضل بزيارة الوثائق الرسمية لـ SQLite حول هذا الموضوع.
مزايا SQLite
- بصمة صغيرة: كما يوحي اسمه، مكتبة SQLite خفيفة جدًا. على الرغم من أن المساحة التي يستخدمها تختلف اعتمادًا على النظام الذي يتم تثبيته عليه، إلا أنه يمكن أن يأخذ أقل من 600 كيلوبايت من المساحة. بالإضافة إلى ذلك، فهو مكتبة ذاتية الاكتفاء تمامًا، مما يعني أنه ليس هناك أي تبعيات خارجية يجب تثبيتها في نظامك ليعمل SQLite.
- سهل الاستخدام: يُصف SQLite أحيانًا بأنه قاعدة بيانات “خالية من التكوين” التي تكون جاهزة للاستخدام مباشرة بعد التثبيت. لا يعمل SQLite كعملية خادم، مما يعني أنه لا يحتاج أبدًا إلى إيقاف التشغيل أو بدء التشغيل أو إعادة التشغيل، ولا يأتي مع أي ملفات تكوين يجب إدارتها. تساعد هذه الميزات في تبسيط المسار من تثبيت SQLite إلى دمجه مع التطبيق.
- محمول: على عكس أنظمة إدارة قواعد البيانات الأخرى، التي عادة ما تخزن البيانات كمجموعة كبيرة من الملفات المنفصلة، يتم تخزين قاعدة بيانات SQLite بأكملها في ملف واحد. يمكن تحديد موقع هذا الملف في أي مكان في التسلسل الهرمي للمجلدات، ويمكن مشاركته عبر وسائط قابلة للإزالة أو بروتوكول نقل الملفات.
عيوب SQLite
- تنافسية محدودة: على الرغم من أن عمليات متعددة يمكن أن تصل وتستعلم قاعدة بيانات SQLite في نفس الوقت، إلا أن عملية واحدة فقط يمكنها إجراء تغييرات على قاعدة البيانات في أي وقت محدد. يعني هذا أنه بينما يدعم SQLite تنافسية أكبر من معظم أنظمة إدارة قواعد البيانات المضمنة الأخرى، إلا أنه لا يمكن أن يدعم بقدر ما تدعمه أنظمة إدارة قواعد البيانات العميل/الخادم مثل MySQL أو PostgreSQL.
- لا إدارة المستخدمين: تأتي أنظمة قواعد البيانات غالبًا مع دعم للمستخدمين، أو اتصالات مُدارة مع امتيازات وصول محددة مسبقًا إلى قاعدة البيانات والجداول. نظرًا لأن SQLite يقرأ ويكتب مباشرة إلى ملف عادي على القرص، فإن الأذونات القابلة للتطبيق الوحيدة هي الأذونات النموذجية لنظام التشغيل الأساسي. هذا يجعل SQLite خيارًا سيئًا للتطبيقات التي تتطلب مستخدمين متعددين بامتيازات وصول خاصة.
- الأمان: يمكن لمحرك قاعدة البيانات الذي يستخدم خادمًا، في بعض الحالات، توفير حماية أفضل من الأخطاء في تطبيق العميل مقارنة بقاعدة بيانات بدون خادم مثل SQLite. على سبيل المثال، لا يمكن لنقاط الانحراف في عميل تعديل الذاكرة على الخادم. أيضًا، لأن الخادم هو عملية مستمرة واحدة، يمكن لقاعدة بيانات العميل-الخادم التحكم في وصول البيانات بدقة أكبر مما يمكن لقاعدة بيانات بدون خادم. يسمح هذا بقفل أكثر دقة وتنافسية أفضل.
متى يجب استخدام SQLite
- التطبيقات المضمنة: يعتبر SQLite خيارًا رائعًا لقاعدة بيانات التطبيقات التي تحتاج إلى قابلية للنقل ولا تتطلب التوسع في المستقبل. تشمل الأمثلة التطبيقات المحلية لمستخدم واحد، وتطبيقات الجوال، أو الألعاب.
- استبدال وصول القرص: في الحالات التي يحتاج فيها التطبيق إلى قراءة وكتابة الملفات إلى القرص مباشرة، يمكن أن يكون من المفيد استخدام SQLite للوظائف الإضافية والبساطة التي تأتي مع استخدام SQL.
- اختبار: بالنسبة للعديد من التطبيقات ، قد يكون من الزائد اختبار وظائفها باستخدام نظام إدارة قواعد البيانات الذي يستخدم عملية خادم إضافية. يحتوي SQLite على وضع في الذاكرة يمكن استخدامه لتشغيل الاختبارات بسرعة دون التكلفة الإضافية لعمليات قواعد البيانات الفعلية، مما يجعله خيارًا مثاليًا للاختبار.
عندما لا يكون من الأفضل استخدام SQLite
- العمل مع كميات كبيرة من البيانات: يمكن لـ SQLite بشكل فني دعم قاعدة بيانات تصل إلى 140 تيرابايت في الحجم، طالما أن محرك الأقراص ونظام الملفات يدعمان متطلبات حجم قاعدة البيانات أيضًا. ومع ذلك، يوصي موقع SQLite بأن يتم وضع أي قاعدة بيانات تقترب من 1 تيرابايت على قاعدة بيانات مركزية للعميل والخادم، حيث سيكون من الصعب إدارة قاعدة بيانات SQLite بهذا الحجم أو أكبر.
- حجم كتابة عالٍ: يسمح SQLite بإجراء عملية كتابة واحدة فقط في أي وقت معطى، مما يحد من قدرته على المعالجة بشكل كبير. إذا كان التطبيق الخاص بك يتطلب الكثير من عمليات الكتابة أو الكتاب الفعالة متعددة، فقد لا يكون SQLite كافيًا لاحتياجاتك.
- الوصول إلى الشبكة مطلوب: نظرًا لأن SQLite هو قاعدة بيانات بدون خادم، فإنها لا توفر وصولًا مباشرًا إلى الشبكة لبياناتها. يتم بناء هذا الوصول داخل التطبيق. إذا كانت البيانات في SQLite موجودة على جهاز منفصل عن التطبيق، فسيتطلب ذلك محرك اتصال عالي النطاق بين المحرك والقرص عبر الشبكة. هذا حلاً مكلفًا وغير فعال، وفي مثل هذه الحالات قد يكون نظام إدارة قواعد البيانات العميل-الخادم هو الخيار الأفضل.
MySQL
وفقًا لتصنيف DB-Engines، فقد كان MySQL أكثر نظام إدارة قواعد بيانات RDBMS مفتوح المصدر شعبية منذ بدء الموقع في تتبع شعبية قواعد البيانات في عام 2012. إنه منتج غني بالميزات يشغل العديد من أكبر مواقع الويب والتطبيقات في العالم، بما في ذلك Twitter وFacebook وNetflix وSpotify. يبدأ العمل مع MySQL بشكل نسبي بسهولة، بفضل جزئيًا لتوثيقه الشامل والكبير والمجتمع الكبير من المطورين، بالإضافة إلى وفرة الموارد المتعلقة بـ MySQL على الإنترنت.
تم تصميم MySQL للسرعة والموثوقية، على حساب الالتزام الكامل بالـ SQL القياسي. يعمل مطورو MySQL باستمرار نحو الالتزام الأقرب بالـ SQL القياسي، ولكنه لا يزال متأخرًا مقارنة بتنفيذات SQL الأخرى. ومع ذلك، يأتي مع وسائط SQL متعددة وامتدادات تقربه من الامتثال.
بخلاف التطبيقات التي تستخدم SQLite ، تقوم التطبيقات التي تستخدم قاعدة بيانات MySQL بالوصول إليها من خلال عملية ديمون منفصلة. نظرًا لأن عملية الخادم تقف بين قاعدة البيانات والتطبيقات الأخرى ، فإنها تتيح مزيدًا من التحكم في من لديهم الوصول إلى قاعدة البيانات.
لقد ألهمت MySQL ثروة من التطبيقات الجانبية الثالثة والأدوات والمكتبات المتكاملة التي توسع وظائفها وتسهل العمل معها. بعض الأدوات الجانبية الثالثة الأكثر استخدامًا من هذه الأدوات هي phpMyAdmin، DBeaver، و HeidiSQL.
أنواع البيانات المدعومة في MySQL
يمكن تنظيم أنواع بيانات MySQL إلى ثلاث فئات رئيسية: أنواع الأرقام ، وأنواع التاريخ والوقت ، وأنواع السلاسل.
أنواع الأرقام:
Data Type | Explanation |
---|---|
tinyint |
A very small integer. The signed range for this numeric data type is -128 to 127, while the unsigned range is 0 to 255. |
smallint |
A small integer. The signed range for this numeric type is -32768 to 32767, while the unsigned range is 0 to 65535. |
mediumint |
A medium-sized integer. The signed range for this numeric data type is -8388608 to 8388607, while the unsigned range is 0 to 16777215. |
int or integer |
A normal-sized integer. The signed range for this numeric data type is -2147483648 to 2147483647, while the unsigned range is 0 to 4294967295. |
bigint |
A large integer. The signed range for this numeric data type is -9223372036854775808 to 9223372036854775807, while the unsigned range is 0 to 18446744073709551615. |
float |
A small (single-precision) floating-point number. |
double , double precision , or real |
A normal sized (double-precision) floating-point number. |
dec , decimal , fixed , or numeric |
A packed fixed-point number. The display length of entries for this data type is defined when the column is created, and every entry adheres to that length. |
bool or boolean |
A Boolean is a data type that only has two possible values, usually either true or false . |
bit |
A bit value type for which you can specify the number of bits per value, from 1 to 64. |
أنواع التاريخ والوقت:
Data Type | Explanation |
---|---|
date |
A date, represented as YYYY-MM-DD . |
datetime |
A timestamp showing the date and time, displayed as YYYY-MM-DD HH:MM:SS . |
timestamp |
A timestamp indicating the amount of time since the Unix epoch (00:00:00 on January 1, 1970). |
time |
A time of day, displayed as HH:MM:SS . |
year |
A year expressed in either a 2 or 4 digit format, with 4 digits being the default. |
أنواع السلاسل:
Data Type | Explanation |
---|---|
char |
A fixed-length string; entries of this type are padded on the right with spaces to meet the specified length when stored. |
varchar |
A string of variable length. |
binary |
Similar to the char type, but a binary byte string of a specified length rather than a nonbinary character string. |
varbinary |
Similar to the varchar type, but a binary byte string of a variable length rather than a nonbinary character string. |
blob |
A binary string with a maximum length of 65535 (2^16 – 1) bytes of data. |
tinyblob |
A blob column with a maximum length of 255 (2^8 – 1) bytes of data. |
mediumblob |
A blob column with a maximum length of 16777215 (2^24 – 1) bytes of data. |
longblob |
A blob column with a maximum length of 4294967295 (2^32 – 1) bytes of data. |
text |
A string with a maximum length of 65535 (2^16 – 1) characters. |
tinytext |
A text column with a maximum length of 255 (2^8 – 1) characters. |
mediumtext |
A text column with a maximum length of 16777215 (2^24 – 1) characters. |
longtext |
A text column with a maximum length of 4294967295 (2^32 – 1) characters. |
enum |
An enumeration, which is a string object that takes a single value from a list of values that are declared when the table is created. |
set |
Similar to an enumeration, a string object that can have zero or more values, each of which must be chosen from a list of allowed values that are specified when the table is created. |
مزايا MySQL
- الشعبية وسهولة الاستخدام: كواحدة من أنظمة قواعد البيانات الأكثر شيوعًا في العالم، لا يوجد نقص في إداري قواعد البيانات الذين لديهم خبرة في العمل مع MySQL. وبالمثل، هناك وفرة من الوثائق المطبوعة وعبر الإنترنت حول كيفية تثبيت وإدارة قاعدة بيانات MySQL. ويشمل ذلك عددًا من الأدوات من الطرف الثالث – مثل phpMyAdmin – التي تهدف إلى تبسيط عملية البدء مع قاعدة البيانات.
- الأمان: يأتي MySQL مثبتًا مع نص يساعدك في تحسين أمان قاعدة البيانات الخاصة بك من خلال ضبط مستوى أمان كلمة مرور التثبيت، وتعريف كلمة مرور للمستخدم الجذر، وإزالة الحسابات المجهولة، وإزالة قواعد البيانات التجريبية التي يمكن الوصول إليها بشكل افتراضي لجميع المستخدمين. أيضًا، على عكس SQLite، يدعم MySQL إدارة المستخدمين ويتيح لك منح امتيازات الوصول على أساس مستخدم-بمستخدم.
- السرعة: من خلال عدم تنفيذ بعض ميزات SQL، تمكن مطورو MySQL من إعطاء الأولوية للسرعة. في حين أن اختبارات الأداء الأحدث تظهر أن أنظمة إدارة قواعد البيانات العلائقية الأخرى مثل PostgreSQL يمكن أن تتساوى أو على الأقل تقترب من MySQL من حيث السرعة، لا يزال لدى MySQL سمعة كحل قاعدة بيانات سريع للغاية.
- التكرار: تدعم MySQL عددًا من أنواع مختلفة من التكرار، وهو ممارسة مشاركة المعلومات عبر اثنين أو أكثر من الخوادم للمساعدة في تحسين الموثوقية والتوفرية ومقاومة الأخطاء. يعتبر ذلك مفيدًا لإعداد حل نسخ احتياطي لقاعدة البيانات أو توسيع قاعدة البيانات بشكل أفقي.
عيوب MySQL
- القيود المعروفة: نظرًا لأن MySQL تم تصميمها للسرعة وسهولة الاستخدام بدلاً من الامتثال الكامل لـ SQL، فإنها تأتي مع بعض القيود الوظيفية. على سبيل المثال، فإنها تفتقر إلى دعم لـ
FULL JOIN
العبارات. - الترخيص والميزات المميزة: يعتبر MySQL برنامجًا ذو ترخيص مزدوج، مع إصدار مجاني ومفتوح المصدر يتم ترخيصه بموجب GPLv2 وعدة إصدارات تجارية مدفوعة تصدر بتراخيص مميزة. وبسبب ذلك، قد لا تكون بعض الميزات والواجهات الإضافية متاحة إلا للإصدارات التجارية.
- تباطؤ التطوير: منذ استحوذت شركة سن مايكروسيستمز على مشروع MySQL في عام 2008، وبعد ذلك من قبل شركة أوراكل في عام 2009، كانت هناك شكاوى من المستخدمين بأن عملية التطوير لنظام إدارة قواعد البيانات قد تباطأت بشكل كبير، حيث لم تعد المجتمعات لديها القدرة على التفاعل بسرعة مع المشاكل وتنفيذ التغييرات.
متى يجب استخدام MySQL
- العمليات الموزعة: دعم استنساخ MySQL يجعله خيارًا رائعًا لإعدادات قواعد بيانات موزعة مثل الهياكل الأساسية الثانوية أو الأساسية الأساسية.
- المواقع الإلكترونية وتطبيقات الويب: تُشغّل MySQL العديد من المواقع الإلكترونية والتطبيقات عبر الإنترنت. يعود ذلك بشكل كبير إلى سهولة تثبيت وإعداد قاعدة بيانات MySQL، فضلاً عن سرعتها العامة وقابليتها للتوسع على المدى الطويل.
- النمو المستقبلي المتوقع: يمكن أن يسهم دعم استنساخ MySQL في تيسير التوسع الأفقي. بالإضافة إلى ذلك، يُعتبر من السهل نسبيًا الترقية إلى منتج MySQL التجاري، مثل مجموعة MySQL، التي تدعم التشظي شبه الآلي، وهي عملية أخرى للتوسع الأفقي.
عندما لا تستخدم MySQL
- الامتثال لـ SQL ضروري: نظرًا لعدم محاولة MySQL تنفيذ معيار SQL الكامل، فإن هذه الأداة ليست متوافقة تمامًا مع SQL. إذا كان الامتثال الكامل أو حتى القريب من الكامل لمعيار SQL ضروريًا لحالتك الاستخدامية، قد ترغب في استخدام نظام إدارة قواعد البيانات الذي يتوافق تمامًا مع SQL أكثر.
- تنافسية وحجم بيانات كبير: على الرغم من أن MySQL تعمل بشكل عام بشكل جيد مع العمليات التي تتضمن قراءة كثيفة، إلا أن القراءة والكتابة المتزامنة يمكن أن تكون مشكلة. إذا كان لتطبيقك العديد من المستخدمين الذين يقومون بكتابة البيانات إليه في نفس الوقت، فقد يكون استخدام نظام إدارة قواعد البيانات العلاقية الأخرى مثل PostgreSQL خيارًا أفضل.
PostgreSQL
PostgreSQL، المعروف أيضًا باسم Postgres، يُعلن عن نفسه بأنه “أكثر قاعدة بيانات علاقية مفتوحة المصدر تقدمًا في العالم”. تم إنشاؤه بغرض أن يكون قابلاً للتوسيع بشكل كبير ومتوافقًا مع المعايير. PostgreSQL هو قاعدة بيانات علاقية مع كيانات، مما يعني أنه على الرغم من أنه في المقام الأول قاعدة بيانات علاقية، إلا أنه يشمل أيضًا ميزات – مثل الوراثة الجدولية وتحميل الدوال – التي غالبًا ما ترتبط بقواعد بيانات الكائنات.
بوستغريس قادر على التعامل بكفاءة مع عدة مهام في نفس الوقت، وهو سمة معروفة باسم التنافرية. يحقق ذلك بدون قفل القراءة بفضل تنفيذه لـ ضبط التنافرية متعدد الإصدارات (MVCC)، الذي يضمن الذرية والاتساق والعزلة والمتانة لمعاملاته، المعروفة أيضًا باسم الامتثال لـ ACID.
ليس بوستغريس مستخدمًا على نطاق واسع مثل ماي إس كيو إل، ولكن هناك لا يزال عدد من الأدوات والمكتبات من جهات خارجية مصممة لتبسيط العمل مع بوستغريسكيو إل، بما في ذلك pgAdmin و Postbird.
أنواع البيانات المدعومة بوستغريسكيو إل
يدعم بوستغريسكيو إل أنواع البيانات الرقمية والنصية والتاريخية والزمنية مثل ماي إس كيو إل. بالإضافة إلى ذلك، يدعم أنواع بيانات للأشكال الهندسية، وعناوين الشبكة، وسلاسل البت، والبحث النصي، والإدخالات JSON، بالإضافة إلى العديد من أنواع البيانات الخاصة.
أنواع البيانات الرقمية:
Data Type | Explanation |
---|---|
bigint |
A signed 8 byte integer. |
bigserial |
An auto-incrementing 8 byte integer. |
double precision |
An 8 byte double precision floating-point number. |
integer |
A signed 4 byte integer. |
numeric or decimal |
A number of selectable precision, recommended for use in cases where exactness is crucial, such as monetary amounts. |
real |
A 4 byte single precision floating-point number. |
smallint |
A signed 2 byte integer. |
smallserial |
An auto-incrementing 2 byte integer. |
serial |
An auto-incrementing 4 byte integer. |
أنواع الأحرف:
Data Type | Explanation |
---|---|
character |
A character string with a specified fixed length. |
character varying or varchar |
A character string with a variable but limited length. |
text |
A character string of a variable, unlimited length. |
أنواع التاريخ والزمن:
Data Type | Explanation |
---|---|
date |
A calendar date consisting of the day, month, and year. |
interval |
A time span. |
time or time without time zone |
A time of day, not including the time zone. |
time with time zone |
A time of day, including the time zone. |
timestamp or timestamp without time zone |
A date and time, not including the time zone. |
timestamp with time zone |
A date and time, including the time zone. |
أنواع الأشكال الهندسية:
Data Type | Explanation |
---|---|
box |
A rectangular box on a plane. |
circle |
A circle on a plane. |
line |
An infinite line on a plane. |
lseg |
A line segment on a plane. |
path |
A geometric path on a plane. |
point |
A geometric point on a plane. |
polygon |
A closed geometric path on a plane. |
أنواع عناوين الشبكة:
Data Type | Explanation |
---|---|
cidr |
An IPv4 or IPv6 network address. |
inet |
An IPv4 or IPv6 host address. |
macaddr |
A Media Access Control (MAC) address. |
أنواع سلاسل البت:
Data Type | Explanation |
---|---|
bit |
A fixed-length bit string. |
bit varying |
A variable-length bit string. |
أنواع البحث النصي:
Data Type | Explanation |
---|---|
tsquery |
A text search query. |
tsvector |
A text search document. |
أنواع JSON:
Data Type | Explanation |
---|---|
json |
Textual JSON data. |
jsonb |
Decomposed binary JSON data. |
أنواع البيانات الأخرى:
Data Type | Explanation |
---|---|
boolean |
A logical Boolean, representing either true or false . |
bytea |
Short for “byte array”, this type is used for binary data. |
money |
An amount of currency. |
pg_lsn |
A PostgreSQL Log Sequence Number. |
txid_snapshot |
A user-level transaction ID snapshot. |
uuid |
A universally unique identifier. |
xml |
XML data. |
مزايا PostgreSQL
- الامتثال لـ SQL: بشكل أكبر من SQLite أو MySQL، تهدف PostgreSQL إلى الالتزام الوثيق بمعايير SQL. وفقًا لوثائق PostgreSQL الرسمية، يدعم PostgreSQL 160 ميزة من بين 179 ميزة مطلوبة للامتثال الكامل لـ SQL:2011 الأساسي، بالإضافة إلى قائمة طويلة من الميزات الاختيارية.
- مفتوح المصدر وقائم على المجتمع: مشروع مفتوح المصدر بالكامل، تم تطوير كود مصدر PostgreSQL من قبل مجتمع كبير ومخلص. بالمثل، يقوم مجتمع Postgres بالمحافظة على والمساهمة في العديد من الموارد عبر الإنترنت التي تصف كيفية العمل مع نظام إدارة قواعد البيانات، بما في ذلك الوثائق الرسمية، و ويكي PostgreSQL، والمنتديات عبر الإنترنت المختلفة.
- قابل للتوسيع: يمكن للمستخدمين توسيع PostgreSQL برمجياً وعلى الطاير من خلال عملياته المدفوعة بالفهرس واستخدامه لـ التحميل الديناميكي. يمكن للشخص تحديد ملف كود مصدري، مثل مكتبة مشتركة، وسيقوم PostgreSQL بتحميله عند الضرورة.
عيوب PostgreSQL
- أداء الذاكرة: لكل اتصال جديد للعميل، تنشئ PostgreSQL عملية جديدة. يُخصص حوالي 10 ميجابايت من الذاكرة لكل عملية جديدة، مما قد يتراكم بسرعة لقواعد البيانات ذات الاتصالات الكثيرة. وبناءً على ذلك، يكون PostgreSQL عادةً أقل أداءً لعمليات القراءة البسيطة المتكررة مقارنة بأنظمة إدارة قواعد البيانات العلائقية الأخرى مثل MySQL.
- الشهرة: على الرغم من استخدام PostgreSQL بشكل أوسع في السنوات الأخيرة، إلا أنها كانت تتأخر تاريخياً مقارنة بـ MySQL من حيث الشهرة. وأحد النتائج المترتبة على ذلك هو أن هناك أقل عدد من الأدوات الخارجية التي يمكن أن تساعد في إدارة قاعدة بيانات PostgreSQL. بالمثل، لا يوجد العديد من مديري قواعد البيانات الذين لديهم خبرة في إدارة قاعدة بيانات Postgres مقارنةً بأولئك الذين لديهم خبرة في MySQL.
متى يجب استخدام PostgreSQL
- أهمية سلامة البيانات: تتوافق PostgreSQL بالكامل مع معايير ACID منذ عام 2001 وتنفذ التحكم في العملة متعددة الإصدارات لضمان استمرارية البيانات، مما يجعلها خيارًا قويًا لأنظمة إدارة قواعد البيانات العلائقية عندما تكون سلامة البيانات مهمة.
- التكامل مع أدوات أخرى: يتوافق PostgreSQL مع مجموعة واسعة من لغات البرمجة والمنصات. هذا يعني أنه إذا كنت بحاجة إلى نقل قاعدة البيانات الخاصة بك إلى نظام تشغيل آخر أو دمجها مع أداة محددة، فمن المرجح أن يكون الأمر أسهل مع قاعدة بيانات PostgreSQL من غيرها من أنظمة إدارة قواعد البيانات.
- العمليات المعقدة: يدعم بوستجريس خطط الاستعلام التي يمكن أن تستفيد من عدة وحدات معالجة مركزية للرد على الاستفسارات بسرعة أكبر. وهذا، جنبًا إلى جنب مع دعمه القوي للكتاب الذين يكتبون متزامنين متعددين، يجعله اختيارًا رائعًا للعمليات المعقدة مثل مستودعات البيانات ومعالجة المعاملات عبر الإنترنت.
عندما لا يجب استخدام PostgreSQL
- السرعة أمر ضروري: على حساب السرعة، تم تصميم PostgreSQL مع التوسعية والتوافق في الاعتبار. إذا كان مشروعك يتطلب أسرع العمليات قراءة ممكنة، فقد لا يكون PostgreSQL هو الخيار الأفضل لنظام إدارة قاعدة البيانات.
- إعدادات بسيطة: بسبب مجموعة ميزاته الكبيرة والالتزام القوي بمعيار SQL، يمكن أن يكون Postgres مبالغًا فيه لإعدادات قاعدة بيانات بسيطة. بالنسبة للعمليات التي تتطلب قراءة كثيفة حيث يتطلب الأمر السرعة، فإن MySQL عادةً ما يكون خيارًا أكثر عملية.
- تكرار معقد: على الرغم من أن PostgreSQL توفر دعمًا قويًا للتكرار، إلا أنها ميزة نسبياً جديدة. بعض التكوينات – مثل الهندسة المعمارية الأساسية-الأساسية – ليست ممكنة إلا باستخدام امتدادات. يعتبر التكرار ميزة أكثر نضجًا في MySQL ويرى العديد من المستخدمين أن تكرار MySQL أسهل في التنفيذ، خاصة بالنسبة لأولئك الذين يفتقرون إلى الخبرة الكافية في إدارة قواعد البيانات والنظام.
الاستنتاج
اليوم، تعتبر SQLite وMySQL وPostgreSQL أكثر ثلاثة أنظمة إدارة قواعد بيانات علاقية مفتوحة المصدر شهرة في العالم. لكل منها ميزاتها وقيودها الفريدة، وتبرز في سيناريوهات معينة. هناك العديد من المتغيرات في اللعب عند اتخاذ قرار بشأن نظام إدارة قواعد البيانات العلاقية، ونادرًا ما يكون الاختيار بسيطًا مثل اختيار الأسرع أو الذي يحتوي على أكبر عدد من الميزات. في المرة القادمة التي تحتاج فيها إلى حل لقاعدة بيانات علاقية، تأكد من البحث بعمق في هذه الأدوات وغيرها للعثور على تلك التي تناسب احتياجاتك بشكل أفضل.
إذا كنت ترغب في معرفة المزيد عن SQL وكيفية استخدامه لإدارة قاعدة بيانات ذات علاقات، فنحن نشجعك على الرجوع إلى ورقة الغش الخاصة بنا كيفية إدارة قاعدة بيانات SQL. من ناحية أخرى، إذا كنت ترغب في التعرف على قواعد بيانات غير علاقوية (أو NoSQL)، فتحقق من مقارنة أنظمة إدارة قواعد بيانات NoSQL.