بوستغريس (Postgres) تطلق ميزة جديدة مذهلة

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

스크립트

00:00:00يبدو أن جميع أولئك المطورين الذين يقولون استخدموا بوستغريس لكل شيء هم على حق
00:00:04بشكل أكبر مع الإصدار القادم من بوستغريس 19 والذي يتضمن دعماً مدمجاً لاستعلامات الرسم البياني
00:00:10وهذه ميزة رائعة حقاً. لذا في فيديو اليوم أود تغطية جميع الميزات الرئيسية
00:00:16لبوستغريس 19 وأيضاً إلقاء نظرة أعمق على استعلامات الرسم البياني تحديداً لأني أعتقد أنها
00:00:21يمكن أن تغير بشكل جذري الطريقة التي نصمم بها استعلاماتنا ونستخدم بها بوستغريس.
00:00:30لذا أول ميزة هي شيء يسمى “عند التعارض قم بالبحث” (on conflict do select). إذا كنت تريد إدراج صف فقط إذا كان
00:00:35غير موجود بالفعل وفي كلتا الحالتين تريد إرجاع هذا الصف كنتيجة فستحتاج عادةً إلى
00:00:40استعلامين لهذا: عملية إدراج وعملية بحث، وهذا سير عمل شائع حقاً. لذا هنا في المثال
00:00:45نقول إننا سنقوم بالإدراج في جدول المستخدمين البريد الإلكتروني والاسم ومن ثم نعطي تلك القيم وبعد ذلك في
00:00:50النهاية نقول عند التعارض للبريد الإلكتروني لا تفعل شيئاً مع إرجاع الكل (returning star). عبارة لا تفعل شيئاً لا تعيد لك شيئاً عندما يكون الصف
00:00:56موجوداً بالفعل لذا تتبعها بعملية بحث ولكن معاً هذا ليس تنفيذًا ذرياً (atomic). مع الإصدار 19 يمكنك القيام بذلك
00:01:03باستعلام واحد فقط. إدراج في المستخدمين مع إعطاء البريد الإلكتروني والاسم وبعد ذلك نقول عند التعارض للبريد الإلكتروني قم بالبحث
00:01:11مع إرجاع الكل. وإذا كنت تريد التعديل في نفس الاستعلام يمكننا القول إدراج في جدول المستخدمين ومن ثم نعطي
00:01:16القيم مرة أخرى عند التعارض للبريد الإلكتروني قم بالبحث للتحديث مع إرجاع المعرف والاسم. ولأنه عبارة عن تعليمة
00:01:23واحدة فهي ذرية، فإما أن تقوم بإدراجها أو تبحث عنها في كل مرة، وهذه حالة استخدام شائعة جداً
00:01:29وستكون مفيدة حقاً. لذا التالي هو الرسوم البيانية، ولكن إذا كنت تستمتع بهذا فلماذا لا
00:01:34تشترك في بيتر ستاك (Better Stack) لتبقى على اطلاع بأحدث التقنيات. الآن كما قلت من قبل هذه
00:01:39هي الميزة الرئيسية في رأيي. لذا لنفترض أن لديك المخطط المعتاد لمتجر ما، لديك عملاء
00:01:44وطلبات ومركبات إضافة إلى جدولين ربط يربطانهم ببعضهم البعض، وتريد معرفة أي
00:01:50منتج اشتراه عميل معين بالفعل. في لغة SQL عبارة عن سلسلة من عمليات الانضمام عبر الجداول الخمسة كلها وذلك
00:01:56يبدو قابلاً للإدارة هنا ولكنه يصبح قبيحاً جداً بسرعة مع العلاقات الأكثر تعقيداً. حسناً الآن يمكننا
00:02:02الاستعلام عن كل هذا كرسوم بيانية بحيث تصبح بنية الانضمام المعقدة تلك بنية رسم بياني جديدة بدلاً من ذلك. ومع
00:02:08عمليات الانضمام المعقدة على وجه الخصوص سترى فائدة كبيرة حقاً هنا. لذا نحن داخل عارض قاعدة البيانات
00:02:14الخاص بنا هنا ويمكنك أن ترى أن لدينا كل جداولنا، لدينا منتجات، طلبات، أحداث، ولدينا
00:02:20عملاء أيضاً وبعد ذلك لدينا جداول الربط لربط كل هذه البيانات. لذا لدينا عناصر الطلبات
00:02:25وطلبات العملاء، والآن دعونا نحاول تشغيل استعلام ضد كل هذه الجداول. لذا على سبيل المثال
00:02:30لدي هذا المستخدم هنا يدعى أليس، وأريد معرفة جميع الأشياء التي طلبتها أليس. للقيام
00:02:35بذلك سيتعين علي مرروراً عبر مجموعة من استعلامات الانضمام المختلفة لربط كل تلك الجداول معاً. لذا سأشغل هذا
00:02:41الاستعلام الذي يحتوي على أربع تعبيرات انضمام منفصلة بداخله، وبينما هذا ليس بالضرورة صعباً
00:02:46الكتابة إلا أنه قبيح جداً، ولكن إذا قمنا بتشغيل هذا يمكنك أن ترى أننا نستطيع رؤية كل الأشياء التي طلبتها أليس:
00:02:51لوحة المفاتيح الميكانيكية والفأرة المريحة، ولكن الآن يمكننا استخدام بنية الرسم البياني لتبسيط هذا
00:02:57بشكل هائل. لذا سنقوم باستبدال كل هذا ببنية الرسم البياني الجديدة وسنفعل ذلك مرة أخرى وسترى
00:03:03أننا نحصل على نفس النتائج وإذا قمنا بترتيب كل هذا فيبدأ يصبح أسهل للقراءة بحيث يمكنك أن ترى
00:03:07أننا ننتقل فقط من العملاء إلى طلبات العملاء إلى الطلبات إلى عناصر الطلبات إلى المنتجات. لذا يمكنك
00:03:13ببساطة اتباع هذا التدفق البسيط لتجاوز الرسم البياني بأكمله والذي في رأيي هو أسهل بكثير
00:03:19في القراءة. إذا كنت تريد تحديد أعمدة متعددة أيضاً يمكننا فعل ذلك، لدينا نفس
00:03:23استعلام الرسم البياني في الأعلى هنا ولكن بعد ذلك يمكننا تحديد الأعمدة في الأسفل ومن ثم نختار كل
00:03:27الأعمدة التي نريد عرضها وعند تنفيذ ذلك نحصل على النتائج في الأسفل. الآن لا شيء من هذا
00:03:32سيعمل ما لم نكن قد أنشأنا الرسم البياني في المقام الأول، لذا الاستعلام الذي استخدمته
00:03:37لتوليد هذا الرسم البياني موجود هنا، نقول إنشاء رسم بياني للخصائص ونعطيه اسم متجري وبعد ذلك
00:03:42نحدد جداول العقد (vertices) والتي ستكون العملاء والطلبات والمنتجات، هذه هي
00:03:47الأشياء التي تحتفظ بالبيانات بالفعل وبعد ذلك لدينا جداول الحواف (edges) وهذه هي الأشياء التي
00:03:52تقوم بإجراء الاتصالات بالفعل أي جداول الربط في حالتنا ستكون طلبات العملاء وعناصر
00:03:57الطلبات، وبنية هذا بسيطة للغاية، نقول لطلبات العملاء المصدر هو العملاء و
00:04:02الوجهة هي الطلبات وبالنسبة لعناصر الطلبات المصدر هو الطلبات والوجهة هي المنتجات ومع
00:04:08توفر ذلك، سيكون بوستغريس الآن على دراية في كل مرة نقوم فيها بتشغيل استعلام رسم بياني بكيفية تحديد
00:04:14تلك العلاقات. لكي يعمل هذا تحتاج إلى إنشاء رسم بياني ولكن هذا لا ينشئ جداول جديدة أو أي شيء
00:04:19بل تشير فقط إلى الجداول الخمسة التي لديك بالفعل، الثلاثة التي تحتفظ بالبيانات تصبح
00:04:23عقداً وجدولا الانضمام يصبحان حوافاً، وهو يعمل بشكل أشبه بالعرض (view) بحيث يبقى مخططك السابق
00:04:29دون تغيير تماماً بل تحصل على هذه الوظيفة الإضافية في الأعلى، لذا هنا سنقوم
00:04:35بالقول إنشاء رسم بياني للخصائص سنسميه متجري وبعد ذلك نبدأ في وصف كيف تعمل تلك العلاقة
00:04:40بالفعل وهذا هو المكان الذي نقوم فيه بكل العمل للرسم البياني وهو ما يعني أن الاستعلامات
00:04:45يمكن أن تكون أنحف بكثير من بنية الانضمام الخاصة بها، إذن هل هذا بديل لقاعدة نيو4ج (Neo4j)؟ حسناً إذا كنت تريد قاعدة بيانات
00:04:52رسم بياني لأنك بحاجة إلى تخزين رسوم بيانية وأداء اجتياز فلا، وقاعدة بيانات الرسوم البيانية
00:04:58المخصصة لا تزال على الأرجح الخيار الأفضل، ولكن إذا كنت تريد هذا لأن كتابة انضمامات من 10 جداول في
00:05:03SQL أمر مؤلم وقبيح فسوف يفيدك بالتأكيد وسيكون أجمل بكثير
00:05:09 بالمقارنة. الميزة الجديدة الثالثة هي إعادة الحزم (repack) وهذه تتعلق استعادة مساحة القرص. بوستغريس
00:05:15لا يقوم أبداً بتحديث صف في مكانه بل يكتب نسخة جديدة ويترك القديمة وراءه والتفريغ (vacuum) فقط
00:05:21يميز تلك المساحة الميتة على أنها قابلة لإعادة الاستخدام لذا فإن استخدام القرص الخاص بك لا ينخفض فعلياً أبداً. إعادة الحزم تعيد كتابة الجدول بأكمله
00:05:27إلى ملف جديد بدون أي مساحة مهدرة فيه وهذا هو ما يعيد المساحة إلى
00:05:33نظام التشغيل. يمكنك في الواقع القيام بذلك بالفعل باستخدام تفريغ كامل (vacuum full) ولكن ذلك يقفل الجدول
00:05:38طوال عملية إعادة الكتابة لذا بالنسبة لأي شيء ضخم لا تقوم بتشغيله أبداً، وهذا هو سبب قيام الناس بتثبيت
00:05:42امتدادات مثل بي جي ريباك (pg_repack) ولكن الآن نحصل عليها مدمجة في بوستغريس مباشرة. استخدم كلمة مفتاحية بالتزامن (concurrently) مع
00:05:49هذا وهي تحافظ على الجدول قابلاً للقراءة والكتابة بينما تعمل إعادة الحزم. شيء واحد يجب الانتباه إليه هنا رغم ذلك
00:05:54تحتاج إلى مساحة قرص فارغة كافية لنسخة ثانية من الجدول وجميع فهارسه لذا تحتاج إلى
00:06:00مساحة احتياطية لاستعادة المزيد من المساحة بالفعل، لذا هذا ليس بديلًا دقيقًا لـ pg_repack ولكن بالنسبة
00:06:06لجدول عادي فهو يؤدي المهمة بدون الامتداد. حسناً الآن سنقوم بجولة سريعة
00:06:11للميزات المتبقية في إصدار 19. أولاً هو تلميحات الاستعلام (query hints)، يقرر بوستغريس كيفية تشغيل
00:06:17استعلامك ويمكنه تغيير رأيه بمرور الوقت لذا فإن الاستعلام الذي كان جيداً لمدة عام يصبح فجأة بطيئاً
00:06:22ولم يتغير أي شيء في كودك. وحدة جديدة تسمى نصائح خطة بي جي (pg_plan_advice) تتيح لك التقاط الخطة بينما لا تزال
00:06:28سريعة وتثبيتها لتبقى هكذا دائماً. الترجمة الفورية (JIT) أصبحت الآن متوقفة افتراضياً، يقوم بوستغريس بتجميع الاستعلامات الثقيلة
00:06:36إلى كود الآلة ولكنه يقرر متى يكلف نفسه عناء ذلك من تقدير تكلفة المخطط وملاحظات الإصدار
00:06:41تقول إن تقدير التكلفة هذا لم يكن موثوقاً به في الواقع لذا كان يعمل على الاستعلامات التي لم تكن
00:06:46بحاجة إليها حقاً. أيضاً يمكن للتفريغ (vacuum) الآن تنظيف فهارسك باستخدام عدة عمال بالتوازي لذا هذا وقت أقل
00:06:52يتم قضاؤه في تفريغ جدول كبير، يجب عليك تشغيل هذا بنفسك رغم ذلك. هل تعلم عندما تضيف عموداً
00:06:58للقيام بعملية بحث ومن ثم يتعين عليك إضافة نفس العمود إلى التجميع (group by) أيضاً؟ إنه يفعل كل ذلك من أجلك
00:07:03وكلمة نسخ (copy) الرئيسية يمكنها الآن التصدير مباشرة إلى JSON، لذا إذا كنت تقوم بتفريغ ملفات CSV وتحويلها
00:07:09بعد ذلك فيمكنك التوقف عن فعل ذلك، إذن هذا هو بوستغريس 19 بيتا 2 الذي وصل في يوليو والإصدار النهائي
00:07:15متوقع حول سبتمبر أو أكتوبر لذا إذا كنت تشغل أي شيء أقدم فهو يستحق جلب الإصدار التجريبي
00:07:21والاختبار ضده الآن وإذا كنت تريد رؤية المزيد عن بوستغريس يمكنك في الواقع التحقق من
00:07:25تحليل لـ بي جي ديرابل (pg_durable) فهو يضع سير عمل متين مباشرة داخل بوستغريس. لقد كنت وارن من
00:07:31بيتر ستاك شكراً للمشاهدة وأراك في الفيديو القادم

핵심 요약

يجلب إصدار بوستغريس 19 تحسينات جوهرية تشمل دعم استعلامات الرسم البياني وعمليات الإدراج الذرية وإعادة حزم المساحة دون قفل الجداول.

하이라이트

  • يشتمل إصدار بوستغريس 19 على دعم مدمج لاستعلامات الرسم البياني لتبسيط الاستعلامات المعقدة عبر الجداول.

  • تتيح ميزة عند التعارض قم بالبحث إدراج الصف أو البحث عنه في تعليمة ذرية واحدة.

  • تعيد ميزة إعادة الحزم كتابة الجدول بأكمله إلى ملف جديد بدون مساحة مهدرة وبشكل متزامن.

  • تتوقف خدمة الترجمة الفورية افتراضياً في الإصدار الجديد بسبب عدم موثوقية تقدير التكلفة.

  • تدعم كلمة نسخ الرئيسية في الإصدار 19 التصدير المباشر إلى تنسيق جيه أس أو إن.

타임라인

مقدمة الإصدار والميزات الجديدة

  • يتضمن الإصدار القادم بوستغريس 19 دعماً مدمجاً لاستعلامات الرسم البياني.
  • تغير هذه الميزات الجديدة بشكل جذري طريقة تصميم استعلامات قواعد البيانات.

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

ميزة الإدراج والبحث عند التعارض

  • تتيح تعليمة عند التعارض قم بالبحث تنفيذ عملية الإدراج والبحث في استعلام واحد.
  • تضمن هذه التعليمات التنفيذ الذري للعملية إما بالإدراج أو بالبحث في كل مرة.

تتطلب سير العمليات السابق استعلامين منفصلين للإدراج والبحث غير الذري. يدمج الإصدار الجديد هذه العمليات في تعليمة واحدة تدعم التحديث وإعادة القيم مباشرة.

استعلامات الرسم البياني والعلاقات المعقدة

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

تستبدل استعلامات الرسم البياني سلاسل الانضمام الطويلة عبر الجداول بتدفق بسيط للبيانات. يعتمد النظام على الجداول الحالية دون إنشاء جداول جديدة فعلية بل يعاملها كعقد وحواف لتسهيل القراءة.

إعادة حزم المساحة وتحسينات الأداء

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

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

커뮤니티 글

모든 글 보기