تقنية الـ SQL الموزعة: بديل عن تقسيم قواعد البيانات

تشاردينج قاعدة البيانات هو عملية تقسيم البيانات إلى قطع أصغر تسمى “شرائح”. تشاردينج عادة ما يتم إدخاله عندما يكون هناك حاجة لتوسيع الكتابات. خلال مدة التطبيق الناجح، ستصل خادم قاعدة البيانات إلى أقصى عدد من الكتابات التي يمكنه إجراؤها إما في المعالجة أو السعة. تقطيع البيانات إلى عدة شرائح – كل منها على خادم قاعدة بياناته – يقلل الضغط على كل عقدة فردية، مما يزيد بشكل فعال من سعة الكتابة الكلية لقاعدة البيانات. هذا ما يعنيه تشاردينج قاعدة البيانات.

SQL موزع هو الطريقة الجديدة لتوسيع قواعد البيانات العلائقية باستخدام استراتيجية تشبه تشاردينج تلك تمامًا تلقائيًا وشفافًا بالنسبة للتطبيقات. تم تصميم قواعد SQL الموزعة من الأساس لتوسيع تقريبًا خطيًا. في هذا المقال، ستتعرف على أساسيات SQL الموزع وكيفية البدء.

العيوب في تشاردينج قاعدة البيانات

يقدم التشاردينج مجموعة من التحديات:

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

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

ما هو SQL الموزع؟

ال SQL الموزع يشير إلى جيل جديد من قواعد البيانات العلائقية. ببساطة، قاعدة بيانات SQL الموزعة هي قاعدة بيانات علائقية تتمتع بـ تجزئة شفافة تبدو كقاعدة بيانات منطقية واحدة للتطبيقات. تتم إنجاز قواعد SQL الموزعة على شكل هيكل لا يشترك في الموارد ومحرك تخزين يتوافق مع كل من القراءة والكتابة بينما يحافظ على الامتثال الحقيقي لـ ACID والتوفير العالي للاتاحة. تتمتع قواعد SQL الموزعة بميزات القابلية للتوسع من قواعد NoSQL – التي حظيت بشهرة في العقد الأول من القرن الحادي والعشرين – دون التضحية بالتنظيم. فهي تحتفظ بمزايا قواعد البيانات العلائقية وتضيف التوافق مع السحابة مع مرونة عدة مناطق.

A different but related term is NewSQL (coined by Matthew Aslett in 2011). This term also describes scalable and performant relational databases. However, NewSQL databases don’t necessarily include horizontal scalability.

كيف يعمل ال SQL الموزع؟

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

دعونا ندرس مثالاً. لنفترض أن لدينا مثيل قاعدة بيانات مع some_table وعدد من الصفوف:

يمكننا تقسيم البيانات إلى ثلاث قطع (شُرائح):

ثم ننقل كل قطعة من البيانات إلى مثيل قاعدة بيانات منفصل:

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

عندما يتم إضافة قمة جديدة إلى المجموعة أو عندما يفشل عقد واحد، يعيد توزيع Xpand البيانات تلقائيًا دون الحاجة إلى تدخل يدوي. هنا ما يحدث عند إضافة قمة إلى المجموعة السابقة:

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

تتيح هذه البنية القدرة على التوسع تقريبًا خطيًا. لا توجد حاجة للتدخل اليدوي على المستوى التطبيقي. بالنسبة للتطبيق، تبدو المجموعة مثل قاعدة بيانات منطقية واحدة فقط. يتصل التطبيق ببساطة بقاعدة البيانات عبر موزع الحمل (MariaDB MaxScale):

عندما يرسل التطبيق عملية كتابة (على سبيل المثال، INSERT أو UPDATE)، يتم حساب التجزئة وإرسالها لتصحيح الشريحة. يتم إرسال العديد من الكتابات بشكل موازٍ إلى عقد متعددة.

عندما لا يكون استخدام SQL موزع مناسبًا

تحسين تقسيم قاعدة البيانات الأداء ولكنه يقدم أيضًا إضافي التحميل على مستوى الاتصال بين العقد. قد يؤدي هذا إلى أداء أبطأ إذا لم يتم تكوين قاعدة البيانات بشكل صحيح أو إذا لم يتم تحسين موجه الاستعلام. قد لا تكون SQL الموزع أفضل بديل في التطبيقات التي تحتوي على أقل من 10 آلاف استعلام في الثانية أو 5 آلاف معاملة في الثانية. أيضًا ، إذا كانت قاعدة البيانات الخاصة بك تتكون في الغالب من العديد من الجداول الصغيرة ، فقد يؤدي ذلك إلى أداء أفضل في قاعدة بيانات مونوليثيك.

البدء مع SQL الموزع

نظرًا لأن قاعدة SQL الموزع تبدو للتطبيق وكأنها قاعدة بيانات منطقية واحدة ، فإن البدء بها سهل. كل ما تحتاجه هو ما يلي:

  • عميل SQL مثل DBeaver، DbGate، DataGrip، أو أي تمديد عميل لقاعدة البيانات لمصممك الإستقراري
  • A distributed SQL database

Docker يجعل الجزء الثاني سهلاً. على سبيل المثال ، ينشر MariaDB صورة Docker mariadb/xpand-single التي تسمح لك بتشغيل قاعدة بيانات Xpand فردية للتقييم والاختبار والتطوير.

لبدء حاوية Xpand ، قم بتشغيل الأمر التالي:

Shell

 

docker run --name xpand \
	-d \
	-p 3306:3306 \
	--ulimit memlock=-1 \
	mariadb/xpand-single \
	--user "user" \
	--passwd "password"

انظر إلى صورة Docker الوثائقية للتفاصيل.

ملاحظة: في وقت كتابة هذا المقال، لم تكن صورة Docker mariadb/xpand-single متاحة على أجهزة ARM. على هذه الأجهزة (على سبيل المثال، أجهزة أبل ذات معالجات M1)، استخدم UTM لإنشاء جهاز تخيلي (VM) وتثبيت، على سبيل المثال، Debian. قم بتعيين اسم مستعار واستخدم SSH للاتصال بالجهاز التخيلي لتثبيت Docker وإنشاء حاوية MariaDB Xpand.

الاتصال بقاعدة البيانات

الاتصال بقاعدة بيانات Xpand هو نفسه الاتصال بخادم MariaDB المجتمعية أو المؤسسية. إذا كان لديك أداة CLI mariadb المثبتة، فقط قم بتنفيذ ما يلي:

Shell

 

mariadb -h 127.0.0.1 -u user -p

يمكنك الاتصال بقاعدة البيانات باستخدام واجهة برمجة التطبيقات (GUI) لقواعد بيانات SQL مثل DBeaver، DataGrip، أو تمديد SQL لمحرر النصوص الخاص بك (مثل هذا لـ VS Code). سنستخدم عميل SQL مجاني ومفتوح المصدر يسمى DbGate. يمكنك تنزيل DbGate وتشغيله كتطبيق سطح المكتب أو بما أنك تستخدم Docker، يمكنك نشره كتطبيق ويب يمكنك الوصول إليه من أي مكان عبر متصفح الإنترنت (على غرار phpMyAdmin). فقط استخدم الأمر التالي:

Shell

 

docker run -d --name dbgate -p 3000:3000 dbgate/dbgate

بمجرد بدء الحاوية، اتجه متصفحك إلى http://localhost:3000/. أكمل تفاصيل الاتصال:

انقر على اختبار وتأكد من نجاح الاتصال:

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

التوصيل من Java, JavaScript, Python, و C++

للتوصيل بـ Xpand من التطبيقات يمكنك استخدام واجهات برمجة التطبيقات MariaDB. توجد العديد من تركيبات لغات البرمجة وإطارات الاستمرارية. تغطية هذا خارج نطاق هذا المقال، ولكن إذا كنت ترغب فقط في البدء ورؤية شيء ما في العمل، فحرص على الاطلاع على هذا صفحة البدء السريع مع أمثلة شفرة لـJava, JavaScript, Python, و C++.

القوة الحقيقية لـ SQL الموزع

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

إذا كنت ترغب في معرفة المزيد عن SQL الموزع وMariaDB Xpand، إليك قائمة بالموارد المفيدة:

Source:
https://dzone.com/articles/distributed-sql-an-alternative-to-sharding