خلفية تعتمد على ⁦SQL⁩ ألفا

واجهات ⁦PostgreSQL⁩ سريعة.
استهلاك ذاكرة منخفض.

وحدة ⁦Rust⁩ لـ ⁦Nginx⁩ تتيح دوال ⁦PostgreSQL⁩ عبر ⁦HTTP⁩ وترسل إشعارات التغيير عبر ⁦WebSocket.⁩

GitHub

كيف يقلل ⁦pgxio⁩ الكلفة الإضافية

حلقة أحداث ⁦Nginx⁩

يشترك ⁦HTTP⁩ و⁦WebSocket⁩ وإدخال وإخراج قاعدة البيانات غير الحاجب في حلقة أحداث ⁦Nginx.⁩

إعادة استخدام اتصالات قاعدة البيانات

تقلل العبارات المحضّرة والمعالجة المتسلسلة في خط أنابيب العمل المتكرر ورحلات الاتصال بقاعدة البيانات.

دون إعادة تسلسل ⁦JSON⁩

يُمرّر نص استجابة ⁦JSONB⁩ من ⁦PostgreSQL⁩ دون تغيير. كما يؤدي تعطيل التحقق من المخرجات إلى تجنب تحليل ⁦JSON⁩ للاستجابة.

تمرير الطلبات دون نسخ تجريبي

تزيل النسخة المبنية بمكتبة ⁦libpq⁩ المعدّلة نسخ جسم الطلب إلى ⁦Rust⁩ و⁦libpq⁩ للطلبات المؤهلة. يُطبَّق الاستعارة التلقائية للمخازن على الطلبات الكبيرة المؤهلة عبر اتصالات قاعدة بيانات غير مشفّرة. تظل النسخ القياسية تستخدم النسخ.

استخدم الاختبار أعلاه مخازن منسوخة. لا تزال الاستجابات و⁦TLS⁩ تتضمن عمليات نسخ.

كيف يعمل

pgxio.confمقتطف إعدادات
# HTTP endpoints
pgxio_endpoint list_tasks
  web.list_tasks read_only;

pgxio_endpoint create_task
  web.create_task;

# WebSocket subscription authorization
pgxio_stream tasks
  web.authorize_tasks;
  1. 01

    اكتب دوال ⁦SQL⁩

    تستقبل دوال ⁦SQL⁩ بيانات ⁦JSON⁩ وتعيدها. وتتولى الاستعلامات وقواعد العمل والتحقق من الصلاحيات.

  2. 02

    انشر نقاط نهاية صريحة

    صرّح بالدوال التي تتيحها واجهتك. يتحقق ⁦pgxio⁩ من ⁦JWT⁩ ويستدعي كل دالة داخل معاملة.

  3. 03

    اشترك في التغييرات

    تشير اشتراكات ⁦WebSocket⁩ المصرح بها إلى التغييرات. ويجلب العميل لقطة الحالة الحالية مجددًا عبر ⁦HTTP.⁩

المتصفح / العميلHTTP + WebSocket
⁦pgxio⁩ داخل ⁦Nginx⁩⁦Rust + libpq⁩ غير الحاجبة
PostgreSQLدوال + إشعارات

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

شغّل محليًا

نفّذ هذه الأوامر من نسخة محلية موجودة لشيفرة ⁦pgxio.⁩ تحتاج إلى ⁦Docker Compose⁩ و⁦Python 3.9⁩ أو أحدث.

تستمع بيئة التطوير المرفقة على ⁦localhost. pgxio⁩ برنامج في مرحلة ألفا؛ هذا الإعداد للاستكشاف المحلي.

الطرفية · من نسختك المحلية لشيفرة ⁦pgxio⁩
bin/pgxio init
bin/pgxio up
TOKEN=$(bin/pgxio token alice)

curl http://localhost:8080/v1/create_task \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"title":"Hello from pgxio"}'

curl http://localhost:8080/v1/list_tasks \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{}'