TuBrief
구독 채널
비디오
커뮤니티

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

TuBrief 편집팀
2026년 7월 17일
0
Computing/Software

원본 영상을 바탕으로 AI의 도움을 받아 작성했습니다. 원본 영상이 기준입니다.

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

관련 영상

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

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

Better Stack

커뮤니티의 다른 글

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

2026년 9월 13일

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

2026년 9월 13일

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

2026년 9월 13일

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

2026년 9월 13일

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

2026년 9월 12일

Apple Won the AI Race

2026년 9월 12일

댓글 (0)

Log in to leave a comment

아직 작성된 글이 없습니다

© 2026 . All rights reserved.

TuBrief
구독 채널
비디오
커뮤니티
로그인

التحديات الواقعية عند الانتقال من 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 ونسبة حالات انتظار الجلسة كبيانات زمنية.