3 poin oleh GN⁺ 2024-11-20 | 5 komentar | Bagikan ke WhatsApp
  • Ekstensi yang memungkinkan DB SQLite itu sendiri disematkan ke dalam tabel PostgreSQL sebagai tipe kolom SQLITE
    • Dengan cara ini, multitenancy diselesaikan
  • Membuat DB kosong dengan empty_sqlite: CREATE TABLE people (name TEXT NOT NULL, database SQLITE DEFAULT execute_sqlite(empty_sqlite(), 'CREATE TABLE todos (task TEXT)'));
  • Dapat menjalankan kueri dengan fungsi query_sqlite, dan melakukan insert/update dengan execute_sqlite
    • SELECT * FROM query_sqlite(database, 'SELECT * FROM todos');
    • `UPDATE people SET database = execute_sqlite(database, 'INSERT INTO todos VALUES (''solve multitenancy'')') WHERE name = 'frectonz';
  • Membaca kolom tertentu dengan fungsi get_sqlite_text/get_sqlite_integer/get_sqlite_real: SELECT get_sqlite_text(sqlite_row, 0) FROM query_sqlite(database, 'SELECT * FROM todos');
  • Ditulis dengan Rust + framework Pgrx
  • Detail implementasi:
    • Menyimpan DB sebagai Vec<u8> yang dienkode dengan CBOR (Concise Binary Object Representation)
    • Saat kueri dijalankan, DB dibuat sebagai file acak di folder /tmp. SQLite memuat file tersebut untuk menjalankan kueri, lalu mengembalikan hasilnya sebagai tabel satu baris yang berisi nilai yang dienkode JSON

5 komentar

 
sms8377 2024-11-22

WOW..

 
seunghaekim 2024-11-20

Ya ampun...

 
xguru 2024-11-20

Ini memang ekstensi yang agak aneh, tapi saat membuat SaaS yang bisa diskalakan, rasanya mungkin bisa dipakai setidaknya ketika pengguna perlu menyematkan fungsi DB sederhana.

 
GN⁺ 2024-11-20
Komentar Hacker News
  • Sebagian besar sistem manajemen basis data relasional tidak mendukung record bersarang, dan SQL juga kekurangan kemampuan untuk membuat atau memanfaatkan tabel bersarang

    • Ada pendapat yang mengatakan, "sikap seperti itu tidak bisa diterima"
  • Diusulkan ide untuk membungkus direktori database PostgreSQL dengan tar lalu mengenkodenya sebagai blob biner di SQLite

    • Ini tidak praktis atau berguna, tetapi merupakan konsep menumpuk database SQL
  • Muncul pertanyaan tentang use case untuk ide ini

    • Sulit digunakan saat merancang skema database dalam produk pada umumnya
    • Ada yang bertanya apakah ini ditujukan untuk mencadangkan data pengguna lokal langsung bersama informasi akun dalam aplikasi hibrida
  • Ada pendapat bahwa kolom SQLite akan lebih unggul daripada kolom JSON di SQLite

    • Operator JSON mengharuskan mempelajari bahasa kueri terpisah dan sifatnya terbatas
  • Mekanisme file /tmp terlihat seperti hack dan dipertanyakan apakah benar-benar perlu

    • Mungkin saja membuat database SQLite in-memory lalu menggunakan backup API atau VACUUM INTO untuk memuat data blob biner
  • Jika menggunakan PostgreSQL, masalah multi-tenancy dapat diselesaikan melalui Row Level Security (RLS)

    • Sangat mudah menambahkan kolom tenant ID ke setiap tabel dan menetapkan kebijakan agar hanya satu tenant yang dapat melihat datanya
  • Kejahatan terhadap 1NF (Bentuk Normal Pertama)?

  • Ada keluhan tentang tidak adanya operator

    • Ingin ada indeks dan sintaks operator yang unik untuk join lintas database antar beberapa kolom DATABASE