قواعد البيانات العمودية سريعة بشكل لا يصدق. إليك السبب.

BBetter Stack
Computing/Software

Transcript

00:00:00مع أنني أحب بوستغريس حقاً، إلا أنه ليس الأفضل لكل شيء. هناك نوع مختلف من
00:00:04قواعد البيانات يسمى قاعدة بيانات عمودية يمكنها تنفيذ استعلامات معينة أسرع بـ 40 مرة.
00:00:10تعمل قواعد البيانات هذه عن طريق تخزين الأعمدة معاً بدلاً من الصفوف، مما يعني حصولك على فوائد هائلة
00:00:15لحالات استخدام معينة مثل منصات التحليلات. وطبعاً يأتي كل شيء مقابل مقايضة معينة،
00:00:20ولكننا سنلقي نظرة اليوم على ماهية قواعد البيانات العمودية ونقارن بعض الاستعلامات مقابل
00:00:25بوستغريس لنرى الميزات والعيوب. سنقارن بوستغريس مع كليك هاوس وداك دي بي
00:00:31لذا ابقوا معنا، وستكون لديكم في النهاية فهم قوي لقواعد البيانات القائمة على الأعمدة
00:00:36ومتى تختار التقنية المناسبة.
00:00:43لذا في البداية قلت إنه يمكنك تشغيل استعلامات معينة أسرع بـ 40 مرة، وهذا صحيح إذا أخذنا
00:00:49جدول قاعدة بيانات هنا، لقد حملت مئة مليون صف، وسأقوم بتشغيل استعلام تجميعي (Group By) باستخدام
00:00:55بوستغريس. يستغرق هذا حوالي 9.7 ثانية للتنفيذ لأننا نقوم بتجميع الإيرادات من كل
00:01:00إذا قمنا بتشغيل نفس الاستعلام على نفس مجموعة البيانات باستخدام قاعدة بيانات عمودية، فهذا
00:01:06يشغل حرفياً نفس نص SQL تماماً، فكل من كليك هاوس وداك دي بي يمتلكان بنية SQL تشبه بوستغريس لذا ستجد الأمر مألوفاً -
00:01:13يأتي كليك هاوس في 0.28 ثانية وداك دي بي في 0.24 ثانية، وهو أسرع بأكثر من 40 مرة.
00:01:22كيف يكون هذا ممكناً؟ يبدو الأمر لا يصدق أليس كذلك؟ نفس المئة مليون صف في مدة لا تتجاوز 0.24 ثانية.
00:01:30بينما تقوم قواعد البيانات العمودية بعمل أقل بأضعاف مضاعفة لتعطينا نفس النتائج.
00:01:36دعونا نرى استعلاماً آخر قيد التنفيذ، وملاحظة سريعة يا شباب، نحن ننشر محتوى عن الذكاء الاصطناعي والتكنولوجيا باستمرار،
00:01:42لذا إذا كان هذا شيئاً تستمتع به، فلماذا لا تشترك في بيتر ستاك؟ هذه المرة نقوم بحساب عدد
00:01:47الأحداث بين طابعين زمنيّين حيث يكون رمز البلد هو GB. في حالتنا، ننظر إلى البيانات في
00:01:53شهر مارس. النتائج: بوستغريس بـ 5.9 ثانية، كليك هاوس بـ 0.06 ثانية، وداك دي بي بـ 0.03 ثانية. يحتوي مارس
00:02:02على حوالي 13 بالمائة من إجمالي الأحداث هنا، لذا لا يزال بوستغريس بحاجة إلى فحص ملايين الصفوف. يمكننا
00:02:09إضافة فهرسة عدوانية هنا للمساعدة، لكن ذلك لن يقربنا من أداء كليك هاوس وداك دي بي. إذن لماذا
00:02:15مخازن الأعمدة أسرع بكثير هنا؟ حسناً، كليك هاوس لا يفهرس الصفوف الفردية على الإطلاق. عندما تنشئ
00:02:20جدولاً، فإنك تمنحه مفتاح فرز، وبما أن البيانات مرتبة حسب الطابع الزمني، فإنه يقسم البيانات المرتبة إلى كتل من
00:02:32ويحتفظ بملاحظة عن الطابع الزمني الأول في كل منها. بالنسبة لمئة مليون صف، فهذا حوالي 12 ألف ملاحظة،
00:02:39وهي صغيرة بما يكفي لتستقر في الذاكرة. لذا عندما نطلب مارس، فإنه يقوم بحث سريع عبر تلك
00:02:44الملاحظات، ويجد الكتل التي قد تحتوي على مارس ويقرا فقط تلك الكتل. في حالتنا، هذا يعني 1633 كتلة من أصل
00:02:5212208 ويتم تخطي كل شيء آخر على القرص. يقوم داك دي بي بشيء مشابه، لأنه يحتفظ بحد أدنى
00:03:00وأقصى لكل جزء من العمود، لذا يمكننا النظر إلى جزء ما ورؤية أن الطوابع الزمنية تمتد من يناير إلى
00:03:06فبراير وتخطي الجزء بأكمله دون قراءته. أضف إلى ذلك الحيلة السابقة حيث يقوم فقط بفتح
00:03:10الأعمدة التي يحتاجها، وتحصل على 0.03 ثانية. لكن الأمور تأخذ منعطفاً تاماً عندما تريد
00:03:17تحديد صف واحد بواسطة المعرف (ID). يكشف هذا الاستعلام البسيط الكثير: بوستغريس يستغرق ميلي ثانية، كليك هاوس 168
00:03:26ميلي ثانية، وداك دي بي، ومن المثير للاهتمام، لا يزال عند ميلي ثانية. يمتلك بوستغريس فهرس شجرة ثنائية على
00:03:32المعرف، لذا فهو يتنقل أسفل الشجرة ويحط على الصفحة الوحيدة التي تحتفظ بالصف وينتهي في غضون ميلي ثانية فقط.
00:03:37ولكن مع كليك هاوس لدينا مشكلة: فهارسه الوحيدة هي مفتاح الفرز، وهذا الجدول
00:03:43مرتب حسب الطابع الزمني أولاً والمعرف ثانياً. لذا عندما نطلب معرفاً واحداً، ليست لديه أي فكرة عن الكتلة التي يوجد فيها هذا المعرف،
00:03:51وينتهي به الأمر بفحص كل كتلة من كتل الـ 12208. بمجرد أن يجد الصف، لا يزال
00:03:57عليه فتح ملفات الأعمدة الثمانية بأكملها وإعادة تجميع هذا الصف معاً، وهو الكثير من العمل لمثل هذا
00:04:03الاستعلام البسيط. إذن كيف يفلت داك دي بي من العقاب؟ لقد كان محظوظاً ببياناتنا؛ فقد تم إدخال المعرفات
00:04:09بالترتيب، لذا فإن الحد الأدنى والأقصى في كل جزء تماشيا بدقة مع المعرف، ويمكن لداك دي بي الانتقال مباشرة إلى المعرف
00:04:16الصحيح. لو كانت المعرفات عشوائية، لكان سيفحص العمود بأكمله تماماً مثل كليك هاوس. لننظر الآن
00:04:21إلى تحديث صف. لدينا استعلام واحد لبوستغريس وداك دي بي، ونسخة مختلفة قليلاً لـ
00:04:26كليك هاوس. جاء بوستغريس في 5 ميلي ثانية، وكليك هاوس في 5.8 ثانية، وداك دي بي مرة أخرى في عشرات
00:04:34الميلي ثانية فقط. بوستغريس يعيد كتابة صف واحد فقط ويحدث إدخال فهرس واحد. في كليك هاوس، ملفات البيانات
00:04:40ثابتة لا يتم تعديلها في مكانها أبداً، لذا لتغيير قيمة إيرادات واحدة، عليه إعادة كتابة
00:04:46ملف عمود الإيرادات بأكمله لتلك الكتلة من الجدول. حتى أن كليك هاوس يجعلك تكتب هذا على شكل
00:04:51تعديل جدول (Alter Table) لأنه يتعامل معه كتعديل للجدول بأكمله. هناك تحديث أخف وزناً في
00:04:56المرحلة التجريبية، لكنه مخصص فقط لعدد صغير من الصفوف، حوالي 10 بالمائة من الجدول كحد أقصى. يقع داك دي بي في المنتصف
00:05:03بين الاثنين نظراً لأنه يمكن تغيير ملفه في مكانه، لذا فإن تحديث صف واحد يتم في بضع عشرات من
00:05:08الميلي ثانية. وأخيراً، دعنا نحسب عدد المستخدمين المميزين في جدولنا، مرة أخرى مع اختلاف
00:05:14بسيط في الاستعلام بالنسبة لكليك هاوس. النتائج هي: بوستغريس 38.4 ثانية، كليك هاوس 0.78 ثانية،
00:05:22وداك دي بي أقل من ثانية واحدة. مرة أخرى يعاني بوستغريس؛ فالتجميع عبر جدول بأكمله بهذا الحجم
00:05:28يتطلب ببساطة كمية هائلة من العمل. الآن، غالباً ما ترغب في استخدام قواعد البيانات العمودية لأشياء مثل التحليلات
00:05:34حيث يكون تجميع البيانات عبر مختلف الأعمدة مهمة شائعة. نظرنا هنا إلى خيارين: كليك هاوس
00:05:41هو خادم استضافي مفتوح المصدر ومتاح على معظم المنصات الرئيسية. لتشغيل هذا محلياً، تحتاج إلى تشغيل
00:05:47خادم كليك هاوس على جهازك، وهو أشبه بكيفية عمل بوستغريس. أما داك دي بي فهو يشبه أكثر إس كيو إل لايت (SQLite)؛
00:05:54فهو مكتبة تعمل داخل عمليتها الخاصة وتعيش قاعدة البيانات بأكملها في ملف واحد على القرص، لذا
00:06:00يمكن قفل هذا الملف أثناء تقدم أحد التحديثات، مما يقضي على التزامن. كلاهما قاعدتا بيانات
00:06:06عموديتان ولكنهما تتخذان نهجين مختلفين تماماً، لذا فإن قاعدة البيانات التي تستخدمها في النهاية تعتمد على أكثر بكثير
00:06:12مما يمكنني افتراضه هنا. الأمر لا يتعلق فقط بسرعة الاستعلام الخام عند تشغيل العروض التوضيحية على جهازك المحلي،
00:06:17بل يتعلق بقابلية التوسع، والتكرار، وقابلية التوسع في الميزات. بالطبع، يمتلك بوستغريس نظاماً بيئياً غنياً من الإضافات
00:06:24لتوسيع مجموعة ميزاته بطرق عديدة، والتي يمكنك رؤيتها في الفيديو التالي.

Key Takeaway

توفر قواعد البيانات العمودية مثل كليك هاوس وداك دي بي سرعات فائقة تصل إلى أكثر من 40 مضاعفة في الاستعلامات التحليلية مقارنة ببوستغريس، بينما تتطلب مقايضات واضحة في سرعة البحث الفردي وتحديثات الصفوف.

Highlights

  • تستطيع قواعد البيانات العمودية مثل كليك هاوس وداك دي بي تنفيذ استعلامات تجميعية على جدول يضم مئة مليون صف في مدة لا تتجاوز 0.28 ثانية مقارنة بـ 9.7 ثانية لبوستغريس.

  • يعتمد كليك هاوس على مفتاح فرز وتقسيم البيانات إلى كتل مرتبة بالطابع الزمني، مما يسمح بتخطي قراءة معظم البيانات من القرص.

  • يتفوق بوستغريس في البحث عن صف واحد بواسطة المعرف في غضون ميلي ثانية واحدة مستخدماً فهرس الشجرة الثنائية.

  • تتطلب عمليات التحديث في كليك هاوس إعادة كتابة ملف عمود الكتلة بالكامل نظراً لثبات ملفات البيانات.

  • يتشابه داك دي بي مع إس كي أو إل لايت كونه مكتبة تعمل داخل عمليتها الخاصة وتخزن القاعدة بأكملها في ملف واحد.

Timeline

مقارنة أداء الاستعلامات التجميعية بين بوستغريس وقواعد البيانات العمودية

  • تتفوق قواعد البيانات العمودية في تنفيذ الاستعلامات التحليلية الكبيرة بشكل ملحوظ مقارنة بقواعد البيانات الصفية.
  • يستغرق تنفيذ استعلام تجميع الإيرادات لمليون صف عبر بوستغريس حوالي 9.7 ثانية.
  • تنجز كل من كليك هاوس وداك دي بي نفس استعلام SQL في أقل من 0.28 ثانية.

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

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

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

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

مقارنة أداء البحث عن صف واحد وتحديث البيانات

  • يتفوق بوستغريس في البحث عن صف واحد باستخدام فهرس الشجرة الثنائية في ميلي ثانية واحدة.
  • تعاني قواعد البيانات العمودية من بطء في استرجاع صف واحد لعدم وجود فهارس صفوف تفصيلية.
  • تستلزم التحديثات في كليك هاوس إعادة كتابة ملف عمود الكتلة بالكامل لعدم إمكانية تعديل البيانات في مكانها.

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

الفرق المعماري بين كليك هاوس وداك دي بي

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

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

Community Posts

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

Write about this video