ee-database सिंक क्लाइंट - Entity Enricher डॉक्यूमेंटेशन

ee-database सिंक क्लाइंट

Schema डेटाबेस के लिए ओपन-सोर्स अप्लाई क्लाइंट। इसे अपने PostgreSQL के साथ चलाएं, एक बार पेयर करें, और यह उस डेटाबेस को आपके enrichments के साथ कन्वर्ज्ड रखता है — एक स्नैपशॉट से बूटस्ट्रैप करके, फिर एक एकल आउटबाउंड WebSocket पर लाइव डेल्टा फ़ीड लागू करके। आपकी कनेक्शन स्ट्रिंग कभी आपकी मशीन से बाहर नहीं जाती।

Entity Enricherserver · outboxee-databaseआपकी मशीनआपका डेटाबेसPostgres · MySQL · SQLitebatch · लीज़ 120sapply — एक ट्रांज़ैक्शनcommitack अगली विंडो तुरंत पुश की जाती है

हर statement रिविज़न-गार्डेड है, इसलिए दोबारा डिलीवर हुआ batch वही rows पर कन्वर्ज हो जाता है। कोई SQL error batch को रोलबैक कर देता है और रोक देता है — कोई poison डेल्टा चुपचाप स्किप नहीं होता।

क्लाइंट स्टेट खींचता है, ऑपरेशन नहीं: प्रत्येक डेल्टा एक बदले हुए entity के लिए पूरी वर्तमान पंक्ति(यों) को एक idempotent INSERT … ON CONFLICT … DO UPDATE के रूप में ले जाता है, इसलिए कोई batch छूट जाने पर भी टारगेट कन्वर्ज हो जाता है।

सिंक क्लाइंट क्यों?

Schema डेटाबेस को कई तरीकों से इस्तेमाल किया जा सकता है — n8n, Make.com, MCP, रॉ webhooks, या REST डेल्टा फ़ीड। सिंक क्लाइंट पूरी तरह ऑटोमेटेड रास्ता है: बनाने के लिए सबसे कम और लीक होने के लिए सबसे कम।

बनाने के लिए शून्य workflow

कोई n8n scenario नहीं, कोई cron नहीं, कोई ग्लू कोड नहीं। एक बार पेयर करें और यह snapshot से बूटस्ट्रैप हो जाता है, फिर हर डेल्टा को आते ही लागू करता है।

आपका DSN कभी आपकी मशीन से बाहर नहीं जाता

कनेक्शन स्ट्रिंग कमांड लाइन पर पास की जाती है या स्थानीय रूप से mode-600 में संग्रहीत होती है — इसे कभी भी Entity Enricher को नहीं भेजा जाता। क्लाइंट केवल बाहर की ओर कनेक्ट होता है।

बनावट से ही replay-सुरक्षित

हर डेल्टा एक idempotent, रिविज़न-गार्डेड upsert है। अगर क्लाइंट batch के बीच में बंद हो जाए, तो lease खत्म होने के बाद batch फिर से डिलीवर होता है और दोबारा लागू करने पर वही rows पर कन्वर्ज हो जाता है।

साफ़ तौर पर फेल होता है, चुपचाप कभी नहीं

SQL एरर बैच को रोलबैक करता है, विफल डेल्टा को Databases पेज पर रिपोर्ट करता है, और नॉन-ज़ीरो के साथ बाहर निकलता है — कोई पॉइज़न डेल्टा कभी चुपचाप स्किप नहीं किया जा सकता।

त्वरित शुरुआत

पहले किसी schema पर एक डेटाबेस रजिस्टर करें, फिर एक क्लाइंट पेयर करके उसे अपने डेटाबेस के पास चलाएँ।

  1. 1

    एक डेटाबेस रजिस्टर करें

    Databases पेज पर, जिस schema को मिरर करना है उस पर एक डेटाबेस रजिस्टर करें और उसकी डेटाबेस keys देखें। पूरे मॉडल के लिए Databases देखें। यह स्टेप उस टारगेट dialect को घोषित करता है जिसे क्लाइंट लागू करेगा।

  2. 2

    क्लाइंट इंस्टॉल करें

    Releases से एक साइन की गई बाइनरी डाउनलोड करें, या सोर्स से बिल्ड करें (Go ≥ 1.23)।

    go build -o ee-database .

    सोर्स और साइन किए गए रिलीज़ TOT-Concept/ee-database (MIT) पर उपलब्ध हैं।

  3. 3

    अपने ब्राउज़र के माध्यम से पेयर करें

    ee-database pair चलाएँ। /database/connect पर एक ब्राउज़र टैब खुलता है जिसमें एक छोटा कोड होता है — उसकी पुष्टि करें, और चुनें कि यह क्लाइंट किस डेटाबेस को sync करे।

    ee-database pair --server https://entityenricher.ai
    
    Open this URL in your browser to confirm pairing:
       https://entityenricher.ai/database/connect?code=7QX-KP2
    
      Code: 7QX-KP2
    
    Waiting for confirmation...

    टोकन पसंद है? Databases पेज पर एक जारी करें (Sync client → Pair a client) और उसे सीधे पास करें: ee-database pair --server … <refresh-token>

  4. 4

    इसे अपने डेटाबेस के पास चलाएँ

    पहली बार चलने पर क्लाइंट .sql snapshot फ़ेच करके लागू करता है, फिर कनेक्ट करके deltas स्ट्रीम करता है। --save-dsn कनेक्शन स्ट्रिंग को लोकली स्टोर करता है ताकि बाद के रन में कोई आर्गुमेंट न लगे।

    ee-database run --dsn "postgres://user:pass@localhost:5432/mydb" --save-dsn

    “Next to” का मतलब है नेटवर्क के पास, डेटाबेस सर्वर पर नहीं: कोई भी मशीन या container जो DSN तक पहुँच सकती है, काम करती है — इसमें cloud-managed PostgreSQL (Azure, OVHcloud, AWS RDS…) भी शामिल है, जो आमतौर पर TLS लागू करता है: …/mydb?sslmode=require

डिलीवरी कैसे काम करती है: lease और ack

डेल्टा एक सख्त प्रति-डेटाबेस FIFO आउटबॉक्स के माध्यम से Entity Enricher से बाहर जाते हैं। सर्वर दृश्यमान विंडो को 120 सेकंड के लिए लीज़ करता है और इसे एक बैच के रूप में पुश करता है; क्लाइंट पूरे बैच को एक ट्रांज़ैक्शन में अप्लाई करता है और ack से जवाब देता है, जो कर्सर को आगे बढ़ाता है और अगली विंडो को तुरंत ट्रिगर करता है। बैच के बीच में बंद होने वाला क्लाइंट लीज़ समाप्ति और सर्वर-साइड री-पुश द्वारा कवर होता है — कुछ भी खोता नहीं है या डबल-कमिट नहीं होता।

स्नैपशॉट = शून्य से डेल्टा

बूटस्ट्रैप और स्टेडी-स्टेट एक ही कोड पाथ साझा करते हैं। यदि आपका डेटाबेस पहले से सीड किया गया है तो --skip-bootstrap के साथ बूटस्ट्रैप स्किप करें।

रिविज़न-गार्डेड

प्रत्येक स्टेटमेंट एक _sync_revision रखता है ताकि पुरानी रो कभी नई रो को ओवरराइट न करे, भले ही क्रम से बाहर हो।

फेल होने पर रोकें

SQL एरर विफल डेल्टा id को Databases पेज → Sync client कार्ड पर स्टोर करता है, और प्रोसेस नॉन-ज़ीरो के साथ बाहर निकलती है ताकि आपका सुपरवाइज़र इसे रीस्टार्ट कर सके।

डेटाबेस और डायलेक्ट

टारगेट डायलेक्ट Entity Enricher में schema-डेटाबेस रजिस्ट्रेशन द्वारा तय होता है — क्लाइंट वही SQL लागू करता है जो server रेंडर करता है। PostgreSQL लॉन्च डायलेक्ट है; MySQL और SQLite ड्राइवर पहले से बंडल हैं ताकि उनके SQL रेंडरर आने पर तैयार रहें। मल्टी-स्टेटमेंट अप्लिकेशन प्रति ड्राइवर हैंडल होता है (pgx simple protocol, MySQL multiStatements, और CGO-मुक्त SQLite)।

सुरक्षा

केवल आउटबाउंड

क्लाइंट :443/wss पर WebSocket शुरू करता है। आपका डेटाबेस होस्ट कभी भी इनबाउंड कनेक्शन स्वीकार नहीं करता — कोई पोर्ट खोलने की ज़रूरत नहीं, कोई इनग्रेस कॉन्फ़िगर करने की ज़रूरत नहीं।

एक क्रेडेंशियल, एक डेटाबेस, एक क्लाइंट

एक क्रेडेंशियल एकल स्कीमा डेटाबेस से बंधा होता है। दोबारा पेयरिंग करने पर यह रोटेट हो जाता है और पिछला लाइव कनेक्शन तुरंत हटा देता है।

अल्पकालिक एक्सेस टोकन

365-दिन का रिफ्रेश टोकन (mode-600 में संग्रहीत) 15-मिनट के एक्सेस टोकन के लिए एक्सचेंज किया जाता है जो WebSocket को प्रमाणित करते हैं। UI में रद्द करने से एक लाइव क्लाइंट ~1 सेकंड के भीतर डिस्कनेक्ट हो जाता है।

Least-privilege की सलाह दी जाती है

क्लाइंट को सिंक किए गए schema तक सीमित एक समर्पित डेटाबेस रोल के साथ चलाएं, ताकि कोई कॉम्प्रोमाइज़्ड टोकन और किसी चीज़ को छू न सके।

CLI संदर्भ

कमांडयह क्या करता है
ee-database pair --server URLब्राउज़र-कन्फर्म्ड डिवाइस-कोड पेयरिंग। चुनें कि कौन सा डेटाबेस सिंक करना है।
ee-database pair --server URL <token>Databases पेज पर जारी किए गए टोकन के साथ पेयर करें (headless-फ्रेंडली)।
ee-database run --dsn DSN [--save-dsn] [--skip-bootstrap]स्नैपशॉट से बूटस्ट्रैप करें (जब तक स्किप न किया जाए), फिर कनेक्ट करें और डेल्टा अप्लाई करें।
ee-database run … --create-missingजब target database मौजूद न हो तो उसे पहले DSN की अपनी credentials का उपयोग करके बनाएँ (postgres को CREATEDB चाहिए, mysql को CREATE privilege; sqlite फ़ाइलें वैसे भी अपने आप बन जाती हैं)।
ee-database run … --create-missing --admin-dsn DSNtarget DSN जिन सब चीज़ों का नाम देता है, उन्हें एक admin connection के ज़रिए bootstrap करें: गायब role/user (DSN के password के साथ) और उसके स्वामित्व वाला database। इसके बाद target DSN को किसी create rights की ज़रूरत नहीं होती; admin DSN कभी store नहीं किया जाता।
ee-database run --allएक ही process से हर paired database को एक साथ sync करें (प्रत्येक को एक saved DSN चाहिए)।
ee-database statuspairing स्थिति, server URL और paired databases दिखाएँ।
ee-database disconnectकिसी एक pairing के local credentials भूल जाएँ। UI से server-side पर revoke करें।
ee-database versionप्रिंट संस्करण।

Credentials mode-600 में स्टोर होते हैं, प्रत्येक paired database के लिए एक profile, ~/.config/ee-database/profiles/ के अंतर्गत — प्रति database एक बार pair करें, और जब कई pair हों तो --database NAME उनमें से एक चुनता है। कोई automation ही नहीं चाहिए? वही feed सादे REST के रूप में है: GET /api/databases//changes फिर POST /api/databases//ack — देखें Databases

ओपन सोर्स

क्लाइंट MIT-लाइसेंस्ड है और एक सार्वजनिक रिपॉज़िटरी में रहता है ताकि कोई भी ठीक-ठीक ऑडिट कर सके कि उनके डेटाबेस के विरुद्ध क्या चलता है।

Source: github.com/TOT-Concept/ee-database

Releases: github.com/TOT-Concept/ee-database/releases — प्रत्येक बाइनरी प्रकाशन से पहले साइन की जाती है।