TuBrief
Subscribed Channels
Videos
Community

التحديات الواقعية عند الانتقال من PostgreSQL إلى محرك قائم على Rust

TuBrief Editorial
July 17, 2026
0
Computing/Software

Written with AI assistance from the source video. The video is the authority.

العربية한국어EnglishEspañol中文हिन्दीDeutschFrançaisPortuguêsРусскийBahasa Indonesia日本語

Related Video

تمت إعادة كتابة Postgres بلغة Rust... ونجحت في اجتياز جميع الاختبارات بشكل مذهل8:34

تمت إعادة كتابة Postgres بلغة Rust... ونجحت في اجتياز جميع الاختبارات بشكل مذهل

Better Stack

More from the community

사내 시스템에 llm api 붙일 때 마주하는 현실적인 한계와 대응법

September 13, 2026

레거시 백엔드에 GPT-6 Astra 붙일 때 예산 승인과 보안 통과를 먼저 끝내는 법이 있습니다

September 13, 2026

에이전트끼리 대화하다 6천만 원 청구서가 나오는 이유

September 13, 2026

사내 RAG 벡터 검색에 Okta 권한 필터를 직접 거는 방법

September 13, 2026

브라우저 에이전트에게 내 구글 계정을 통째로 넘기면 안 되는 이유

September 12, 2026

Apple Won the AI Race

September 12, 2026

Comments (0)

Log in to leave a comment

No posts yet

© 2026 . All rights reserved.

TuBrief
Subscribed Channels
Videos
Community
Log in

التحديات الواقعية عند الانتقال من PostgreSQL إلى محرك قائم على Rust

لماذا تفشل عمليات ترحيل الأنظمة القديمة (Legacy)

استبدال محرك قاعدة البيانات ليس مجرد ترقية للأداء. الخطر الأكبر عند الانتقال من محرك PostgreSQL القائم على لغة C إلى pgrust القائم على Rust هو الاختلافات الدقيقة وغير المرئية في الأداء. فمثلاً، أخطاء التقريب الطفيفة الناتجة عن عمليات double precision أو غياب دعم اللغات الإجرائية مثل PL/Python يمكن أن تسبب أخطاء فادحة في المشغلات (triggers) أثناء تشغيل الخدمة. حتى لو اجتاز pgrust أكثر من 46,000 اختبار رسمي، فإن سيناريوهات المعاملات المعقدة في بيئة التشغيل الحقيقية تظل مسألة مختلفة تماماً.

لحل هذه المشكلة، يجب عليك تكوين بيئة اختبار تفاضلية (differential testing) باستخدام سجلات الاستعلام من بيئة التشغيل الفعلية. أولاً، استخرج 100 نمط رئيسي من SQL باستخدام pg_stat_statements. بعد ذلك، قم بإنشاء لقطة مادية (physical snapshot) لقاعدة البيانات الأصلية باستخدام pg_dump. قم بتشغيل النسختين في وقت واحد على أجهزة معزولة ومستقلة، وقم بتمرير نفس تدفق المعاملات باستخدام أداة pgreplay. من خلال مقارنة مخرجات النسختين باستخدام تشفير MD5، يمكنك اكتشاف معظم أخطاء الاتساق قبل النشر.

التحقق من أرقام خفض تكاليف الأجهزة بنسبة 29%

تستخدم PostgreSQL معمارية تنشئ عملية (process) لكل اتصال. هذه الطريقة تستهلك ما بين 9 ميجابايت إلى 10 ميجابايت من الذاكرة الفعلية لكل جلسة. في المقابل، يعتمد pgrust على نهج قائم على الخيوط (threads)، مما يقلل استهلاك الذاكرة لكل اتصال إلى مستوى 256 كيلوبايت. إذا كنت تستخدم حالياً مثيل db.r7g.xlarge (بذاكرة 32 جيجابايت)، فيمكنك تقليص الحجم إلى db.m7g.xlarge (بذاكرة 16 جيجابايت) مع الحفاظ على نفس إنتاجية المعاملات (TPS). هذا الإجراء وحده يمكن أن يقلل تكاليف التشغيل السنوية بنسبة تقارب 29.5%.

يتم التنبؤ بمستوى تحسن الأداء باستخدام النموذج التالي:

ext{TPS} = rac{C_{ ext{vCPU}} imes mu_{ ext{util}}}{L_{ ext{net}} + left( T_{ ext{compute}} imes (1 - alpha) + (1 - H_{ ext{hit}}) imes T_{ ext{io}} ight)}

عند إدخال pgrust، تتحسن كفاءة تقليل تبديل السياق (muextutilmu_{ ext{util}}muextutil​) من 0.82 إلى 0.96. وإذا ارتفع معامل أداء محرك الحساب (alphaalphaalpha) إلى 0.30 بفضل تحسينات SIMD في Rust، فإن إجمالي TPS سيتحسن بأكثر من 50% مقارنة بالسابق.

التحكم في مخاطر الكود الذي يتم إنتاجه بواسطة الذكاء الاصطناعي

عند تحويل كود C إلى Rust باستخدام أدوات الذكاء الاصطناعي، غالباً ما يقوم الذكاء الاصطناعي بتغليف الكود بالكامل داخل كتل unsafe دون فهم إدارة الذاكرة. هذا يؤدي إلى إبطال أمان وقت التجميع الثابت (static compile-time security) والتسبب في أخطاء فادحة (panics) تؤدي إلى انهيار عملية قاعدة البيانات بالكامل. للتحقق من الكود الذي كتبه الذكاء الاصطناعي، يجب فرض القواعد التالية:

  • استخدم كائنات ربط pgrx بدلاً من تعيين المؤشرات الخام (raw pointers).
  • استخدم أنماط النسخ الصريحة مثل to_string() مع مراعاة دورة حياة MemoryContext في PostgreSQL.
  • امنع استخدام جميع أنواع panic! و unwrap() واعتمد على نشر الأخطاء عبر Result<T, &'static str>.

قبل النشر، يجب حظر استخدام الكلمة المفتاحية unwrap() في مرحلة مراجعة الكود باستخدام أدوات التحليل الثابت، كما يجب التأكد بدقة من عدم وجود خروج عن نطاق دورة حياة الذاكرة.

خارطة طريق للإدخال التدريجي الآمن

لا تستبدل قاعدة بيانات التشغيل دفعة واحدة. يجب البدء بالإدخال من النسخ المتماثلة للقراءة فقط (read-only replicas) من خلال الاستفادة من ميزة النسخ المنطقي (logical replication). أولاً، اضبط wal_level على logical في postgresql.conf وقم بنشر الجداول باستخدام أمر CREATE PUBLICATION. بعد ذلك، قم بإعداد مثيل pgrust مجهز بـ pgwire-replication crate لاستقبال تدفق WAL في الوقت الفعلي.

قم بتوجيه 10% من حركة المرور (traffic) إلى عقدة pgrust أولاً للتأكد من قدرتها على تحمل الحمل الفعلي. إذا تجاوزت أخطاء مهلة القفل (lock timeout) 50 خطأ في الدقيقة، أو إذا تجاوز استهلاك الذاكرة 90% لمدة 10 دقائق، فيجب بناء آلية أتمتة لعملية تجاوز الفشل (failover) للعودة فوراً إلى العقدة القديمة. احكم على نجاح عملية الإدخال من خلال قياس التغير في mean_exec_time واتجاهات RSS ونسبة حالات انتظار الجلسة كبيانات زمنية.