SQL पर केंद्रित बैकएंड अल्फ़ा

तेज़ PostgreSQL API।
कम मेमोरी उपयोग।

Nginx के लिए Rust मॉड्यूल, जो PostgreSQL फ़ंक्शन को HTTP पर उपलब्ध कराता है और WebSocket पर बदलाव की सूचनाएँ भेजता है।

GitHub

pgxio अतिरिक्त काम कैसे घटाता है

Nginx इवेंट लूप

HTTP, WebSocket और नॉन-ब्लॉकिंग डेटाबेस I/O, Nginx का इवेंट लूप साझा करते हैं।

डेटाबेस कनेक्शन का दोबारा उपयोग

तैयार स्टेटमेंट और पाइपलाइनिंग बार-बार होने वाला काम तथा डेटाबेस से आने-जाने वाले संचार को घटाते हैं।

JSON का दोबारा सीरियलाइज़ेशन नहीं

PostgreSQL के JSONB उत्तर का टेक्स्ट बिना बदले आगे भेजा जाता है। आउटपुट की जाँच बंद करने से उत्तर के 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

    एंडपॉइंट स्पष्ट रूप से प्रकाशित करें

    API से उपलब्ध होने वाले फ़ंक्शन घोषित करें। pgxio JWT जाँचता है और हर फ़ंक्शन को ट्रांज़ैक्शन के भीतर चलाता है।

  3. 03

    बदलावों की सदस्यता लें

    अनुमति प्राप्त WebSocket सदस्यताएँ बदलाव का संकेत देती हैं। क्लाइंट HTTP से वर्तमान स्नैपशॉट दोबारा लेता है।

ब्राउज़र / क्लाइंटHTTP + WebSocket
Nginx के भीतर pgxioRust + नॉन-ब्लॉकिंग 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 '{}'