Dolt: تجعل SQL تبدو وكأنها Git

BBetter Stack
컴퓨터/소프트웨어창업/스타트업AI/미래기술

Transcript

00:00:00لديك “git” لشيفرتك البرمجية، لكن ماذا عن بياناتك؟ هذه هي المشكلة، ملف CSV واحد أو صف إعدادات واحد خاطئ
00:00:07تعديل واحد في جدول البيانات وقد يتعطل تطبيقك، ولا يوجد تباين (diff) نظيف، ولا فرع (branch)، ولا طلب دمج
00:00:13ولا تراجع واضح. هذا هو “Dolt”، إنه قاعدة بيانات SQL تعمل تماماً مثل “git”، يمكنك إنشاء فروع للجداول
00:00:20وتعديل الصفوف، ورؤية التباينات، وإجراء عمليات الالتزام (commit) ودمجها مجدداً، تحكم حقيقي في إصدارات البيانات الفعلية، سأقوم
00:00:26بتوضيح كيفية إعداد هذا وتشغيله في الدقائق القليلة القادمة
00:00:35نحن نعلم أن قواعد البيانات في أغلب الأوقات رائعة فيما تفعله، فهي قواعد بيانات، تخزن البيانات وتسمح
00:00:41لك بالاستعلام باستخدام SQL، لكنها ليست رائعة في سير العمل الذي نستخدمه كل يوم، مثل التفرع
00:00:47والمراجعة، وإظهار الفوارق، والدمج، والتراجع، ومعرفة من قام بتغيير ماذا بالضبط، لذلك غالباً ما نختار
00:00:54أحد خيارين سيئين، الخيار الأول هو الاحتفاظ بالبيانات في قاعدة بيانات حقيقية، ستحصل على فهارس SQL
00:01:00والقيود والهيكلية، ولكن عندما تتغير البيانات، فإن عملية المراجعة لا تكون بالمستوى المطلوب
00:01:07أما الخيار الثاني فهو وضع البيانات في ملف CSV أو JSON أو YAML حتى يتمكن “git” من تتبعها فعلياً، الآن ستحصل على
00:01:13عمليات الالتزام وطلبات الدمج، لكنك تفقد الميزات التي تجيدها قواعد البيانات، لا توجد SQL حقيقية، وضعف في
00:01:20فرض المخطط، وصعوبة في رؤية الفوارق والدمج، وعندما يسأل شخص ما من قام بتغيير هذا السجل، حسناً الجواب
00:01:27سيكون ببساطة شخصاً لديه صلاحية الوصول لقاعدة البيانات، وهذا ليس بأي حال من الأحوال سير عمل
00:01:32حقيقي. لكن تخيل هذا بدلاً من ذلك، ماذا لو كان بإمكانك تشغيل أمر تفرع مثل “dolt branch fix this data”
00:01:39و “dolt diff” و “dolt commit” و “dolt merge”، هذه أوامر نستخدمها بالفعل، لكننا نستخدمها
00:01:46ضد جداول قاعدة بياناتك الفعلية، هذا ما يفعله “Dolt”، إنه تحكم في الإصدار لقواعد بياناتنا
00:01:52إذا كنت تستمتع بأدوات البرمجة لتسريع سير عملك، تأكد من الاشتراك، لدينا فيديوهات تصدر
00:01:57طوال الوقت. كفى حديثاً، لدينا خيارات، هناك “Dolt” لقواعد بيانات SQLite وPostgres، سمّها ما شئت. لنقم بالنسخة
00:02:04السريعة من هذا، سأنتقل إلى المجلد وسأقوم باستنساخ “Dolt hub getting started” من GitHub
00:02:10سأدخل إلى المجلد الآن، أولاً سأستنسخ قاعدة بيانات “Dolt” عامة وسأقوم بتشغيل “dolt sql”، الآن نحن
00:02:18داخل SQL، لذا يمكنني تشغيل أوامر SQL هنا مباشرة في الطرفية (terminal)، حسناً، سأقوم بإجراء تغيير صغير
00:02:27وسنقوم بتشغيل “dolt diff”، وهذه هي اللحظة الأولى من نوع “مهلاً، ماذا حدث للتو؟”
00:02:34لا يخبرك “Dolt” أن ملفاً ما قد تغير، بل يظهر لك تباين الجدول الفعلي، أي صف تغير وأي عمود
00:02:43تغير، والقيمة القديمة والقيمة الجديدة، يمكنني رؤية ذلك هنا، الآن يمكننا الالتزام بذلك باستخدام “dolt add”
00:02:50ثم يمكنني تشغيل “dolt commit -m” وسأضع تعليقاً، يمكنني إنشاء فرع كامل من هذا باستخدام
00:02:56الأمر “checkout” وسنقوم ببساطة بتشغيل “checkout -b” وتسمية فرعك، إذا أجريت تغييراً آخر فوق هذا، يمكنني
00:03:03معرفة الفرق مجدداً باستخدام “dolt diff”، ويمكنني الالتزام به مجدداً وإضافته مجدداً، الآن إذا عدت إلى الخلف و
00:03:10دمجت، يمكنني الرجوع إلى “main” وتشغيل “dolt merge”، كل هذه الأوامر نعرفها مسبقاً، نحن نقوم فقط
00:03:17بهذا الآن مع SQL. في النهاية، يمكنك تشغيل “dolt log”، الآن أصبحت قاعدة بياناتك تمتلك سجل التزام، وليس مجرد نسخة احتياطية
00:03:24أو ملف تفريغ أو مجرد تعديل في جدول بيانات، بل قاعدة بيانات ذات إصدارات حقيقية، هذه هي الفكرة الجوهرية هنا
00:03:31سير عمل “git” ولكن للجداول. لنعد خطوة إلى الوراء ونرى كيف يعمل كل هذا في الواقع
00:03:37في البداية، يبدو “Dolt” مألوفاً عن قصد، لديك أوامر مثل “dolt status” و “diff” و “add” و “commit” و “branch” و
00:03:44“checkout”، إذا كنت تعرف “git”، فإن عقلك يدرك بالفعل شكل سير العمل هذا بالكامل
00:03:48ما يسعون إليه هو أن “Dolt” لا يتتبع الملفات، بل يتتبع الجداول العلائقية، يمكنك استخدامه من
00:03:55سطر الأوامر أو يمكنك تشغيل “dolt sql server”، من خلال القيام بذلك، يمكنك الآن الاتصال به باستخدام عملاء
00:04:01متوافقين مع MySQL أو ORMs أو أدوات ذكاء الأعمال (BI) أو شيفرة التطبيق، بحيث يمكن لتطبيقك التعامل مع “Dolt” كقاعدة بيانات SQL عادية، ولكنك
00:04:09تحصل على تحكم في الإصدارات حول البيانات، هذا هو الجزء المهم، أنت لا تختار بين
00:04:14قاعدة بيانات حقيقية وسير عمل “git”، بل تحصل على كليهما في نفس المكان، يستخدم “Dolt” شيئاً يسمى “Prolly tree”، النسخة
00:04:22البسيطة من “Prolly tree” هنا هي أن قاعدة البيانات العادية تستخدم هياكل تشبه الشجرة لجعل عمليات القراءة والكتابة
00:04:29سريعة. يستخدم “Dolt” هيكلاً يشبه الشجرة وهو أيضاً جيد في الإصدارات، لذا بدلاً من نسخ كامل
00:04:36قاعدة البيانات في كل مرة تلتزم فيها (commit)، يمكن لـ “Dolt” مشاركة الأجزاء التي بقيت كما هي وتتبع الأجزاء التي
00:04:42تغيرت فعلياً. الآن نحن لا نسأل فقط أسئلة مثل “ما هي القيمة الحالية؟”، بل يمكننا في الواقع أن نسأل
00:04:47أشياء مثل “كيف كان يبدو هذا الصف قبل حدوث شيء ما؟”، هذا هو الأمر المهم هنا
00:04:52لأنه عندما يحدث عطل، لا نريد أن نضطر للتخمين، فأنت تريد فحص السجل، يمكنني الآن
00:04:56مراجعة التباين، ويمكنك رؤية التغيير، وإذا لزم الأمر، يمكنك التراجع، هذا هو التحكم في الإصدار
00:05:02للبيانات المهيكلة، فروعك وعمليات التزامك وتبايناتك ودمجك وسجلاتك للصفوف والأعمدة، فأين يقع “Dolt”؟
00:05:10في الواقع في تدفق الأشياء، لأن كل هذا يبدو رائعاً، ولكن هذا هو المكان الذي قد يصبح فيه الأمر
00:05:15محيرة. قد تسمع بـ “git للبيانات” وربما تفكر، “حسناً، انظر، لدينا بالفعل
00:05:21أدوات لذلك”، نعم، نحن نمتلك بالفعل أدوات لذلك، ولكنها تحل مشكلات مختلفة، يمكنك وضع ملفات CSV
00:05:28وملفات JSON في “git”، وهذا يعمل عندما تكون البيانات صغيرة وبسيطة، لكن “git” لا يفهم مخططك
00:05:35ولا يعرف مفتاحك الأساسي، ولن يفرض قيوداً، ولا يمكنه تشغيل عمليات الربط (joins) على ملف CSV الخاص بك
00:05:41ما لم تضف المزيد من الأدوات، لذا “git” يمنحك تحكماً في الإصدار، لكنه ليس حقاً لقاعدة بيانات
00:05:47ثم هناك “DVC”، “DVC” رائع لسير عمل تعلم الآلة، خاصةً لمجموعات البيانات الكبيرة ونماذج الأصول، لكن
00:05:53إنه لا يحاول أن يكون قاعدة بياناتك العلائقية الحية، نعم لديك “lakeFS” الذي يجلب أفكاراً تشبه “git” إلى
00:06:00تخزين الكائنات وبحيرات البيانات، مفيد جداً على نطاق البحيرة، ولكن مجدداً، هذه طبقة مختلفة تماماً، فهي
00:06:07ليست نفس الشيء كقول: تفرع جدول SQL، غيّر بعض الصفوف، شغّل تباين، وادمجها مجدداً
00:06:13قواعد البيانات التقليدية لديها أيضاً أدوات سجلات، جداول زمنية، سجلات تدقيق، وCDC، لكن معظمها
00:06:20لا يشعرك بسير عمل طبيعي، فهي لا تمنحك الحلقة النظيفة: تفرع، تغيير، تباين، دمج، تراجع
00:06:27لا أقصد أن تضع “Dolt” بشكل أعمى في كل نظام إنتاج، ليس هذا هو الهدف هنا، النقطة هي
00:06:33إذا كان عملك يتضمن بيانات مهيكلة تتغير بمرور الوقت، وتلك التغييرات يمكن أن تعطل الأشياء فعلياً
00:06:40فأعتقد أن “Dolt” يستحق التجربة، في المرة الأولى التي ينقذك فيها من تغيير بيانات سيء وصامت، يبدأ سير العمل
00:06:46بالشعور بأنه أكثر وضوحاً. نحن لدينا “git”، لماذا لا نمتلك شيئاً للبيانات؟ الآن أصبح لدينا نوعاً ما. إذا
00:06:52كنت تستمتع بأدوات برمجية كهذه، تأكد من الاشتراك في قناة “Better Stack”، سنراكم في فيديو
00:06:57آخر

Key Takeaway

توفر Dolt تحكماً كاملاً في إصدارات البيانات المهيكلة من خلال تطبيق سير عمل Git (التفرع، الدمج، التباين) مباشرة على جداول SQL لضمان دقة التغييرات وإمكانية تتبعها.

Highlights

  • تسمح قاعدة البيانات Dolt بإنشاء فروع للجداول، وإجراء عمليات الالتزام (commit)، ودمج البيانات تماماً مثل سير عمل Git.

  • تستخدم Dolt هيكل بيانات يُسمى Prolly tree لتتبع التغييرات على مستوى الصفوف والأعمدة بدلاً من تتبع الملفات بالكامل.

  • تتيح أوامر Dolt مثل dolt diff رؤية التغييرات الدقيقة في الجداول، بما في ذلك الصفوف المعدلة والقيم القديمة والجديدة.

  • يعمل Dolt كخادم متوافق مع MySQL، مما يسمح للتطبيقات وأدوات ذكاء الأعمال بالاتصال به والتعامل معه كقاعدة بيانات SQL عادية.

  • لا تعتمد Dolt على نسخ قاعدة البيانات بالكامل عند كل التزام، بل تشارك الأجزاء الثابتة وتتتبع الأجزاء المتغيرة فقط لتحسين الكفاءة.

Timeline

مشكلة إدارة البيانات التقليدية

  • تفتقر قواعد البيانات التقليدية إلى سير عمل واضح للتفرع، والمراجعة، والتراجع عن التغييرات.
  • يؤدي تخزين البيانات في ملفات CSV أو JSON لتتبعها بواسطة Git إلى فقدان ميزات SQL الأساسية مثل فرض المخطط وعمليات الربط.

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

آلية عمل Dolt وتطبيقها

  • تدعم Dolt أوامر برمجية مألوفة مثل branch وdiff وcommit وmerge داخل الطرفية.
  • يظهر أمر dolt diff تفاصيل التغييرات على مستوى الصفوف والأعمدة وليس مجرد تغييرات في الملفات.

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

الهيكلية والتميز عن الأدوات الأخرى

  • تعتمد Dolt على هيكل Prolly tree لتمكين التتبع الكفء للجداول العلائقية.
  • تختلف Dolt عن أدوات مثل DVC أو lakeFS بكونها قاعدة بيانات علائقية حية تدعم SQL الكامل مع تتبع الإصدارات.

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

Community Posts

No posts yet. Be the first to write about this video!

Write about this video