3 पॉइंट द्वारा GN⁺ 2024-11-20 | 5 टिप्पणियां | WhatsApp पर शेयर करें
  • एक extension जो PostgreSQL टेबल में SQLITE column type के रूप में SQLite DB को ही एम्बेड करने देता है
    • इस तरीके से multitenancy की समस्या हल की जाती है
  • empty_sqlite से खाली DB बनाएं: CREATE TABLE people (name TEXT NOT NULL, database SQLITE DEFAULT execute_sqlite(empty_sqlite(), 'CREATE TABLE todos (task TEXT)'));
  • query_sqlite फ़ंक्शन से query की जा सकती है, और execute_sqlite से insert/update किया जा सकता है
    • SELECT * FROM query_sqlite(database, 'SELECT * FROM todos');
    • UPDATE people SET database = execute_sqlite(database, 'INSERT INTO todos VALUES (''solve multitenancy'')') WHERE name = 'frectonz';
  • get_sqlite_text/get_sqlite_integer/get_sqlite_real फ़ंक्शनों से किसी खास column को पढ़ना: SELECT get_sqlite_text(sqlite_row, 0) FROM query_sqlite(database, 'SELECT * FROM todos');
  • Rust + Pgrx framework से लिखा गया
  • इम्प्लीमेंटेशन विवरण:
    • DB को CBOR (Concise Binary Object Representation) encoded Vec<u8> के रूप में स्टोर किया जाता है
    • query चलाने पर /tmp फ़ोल्डर में random file के रूप में बनाया जाता है। SQLite उस file को लोड करके query चलाता है और नतीजे को JSON encoded values वाली single-row table के रूप में लौटाता है

5 टिप्पणियां

 
sms8377 2024-11-22

वाह..

 
seunghaekim 2024-11-20

हे भगवान...

 
xguru 2024-11-20

यह थोड़ा अजीब extension लगता है, लेकिन scalable SaaS बनाते समय अगर किसी user को आसानी से DB functionality embed करनी हो, तो शायद ऐसे मौकों पर इसका इस्तेमाल किया जा सकता है।

 
GN⁺ 2024-11-20
Hacker News राय
  • ज़्यादातर relational database management systems nested records को support नहीं करते, और SQL में भी nested tables बनाने या इस्तेमाल करने की पर्याप्त क्षमता नहीं है

    • इस पर एक राय है: "यह रवैया ठीक नहीं है"
  • PostgreSQL database directory को tar में बाँधकर SQLite में binary blob के रूप में encode करने का आइडिया प्रस्तावित किया गया

    • यह व्यावहारिक या उपयोगी नहीं है, लेकिन SQL databases को nest करने की एक अवधारणा है
  • इस आइडिया के use case पर सवाल उठाया गया

    • किसी सामान्य product में database schema डिज़ाइन करते समय इसका इस्तेमाल करना मुश्किल है
    • यह जिज्ञासा भी है कि क्या इसका उपयोग hybrid applications में local user data को account information के साथ सीधे backup करने के लिए है
  • एक राय यह है कि SQLite column, SQLite के JSON columns से बेहतर होगा

    • JSON operators के लिए अलग query language सीखनी पड़ती है और वे सीमित हैं
  • /tmp file mechanism थोड़ा hack जैसा लगता है, और यह ज़रूरी है या नहीं इस पर सवाल है

    • SQLite in-memory database बनाकर backup API या VACUUM INTO का उपयोग करके binary blob data लोड करने का तरीका संभव हो सकता है
  • यदि PostgreSQL इस्तेमाल कर रहे हैं, तो Row Level Security(RLS) के ज़रिए multi-tenancy की समस्या हल की जा सकती है

    • हर table में tenant ID column जोड़कर और ऐसी policy सेट करके कि केवल एक tenant ही data देख सके, यह काम बहुत आसानी से हो जाता है
  • 1NF(प्रथम सामान्य रूप) अपराध?

  • operators न होने को लेकर असंतोष

    • कई DATABASE columns के बीच cross-database join के लिए index और अलग तरह की operator syntax चाहिए