3 puan yazan GN⁺ 2024-11-20 | 5 yorum | WhatsApp'ta paylaş
  • PostgreSQL tablolarına SQLITE sütun tipiyle SQLite veritabanının kendisini gömmeyi sağlayan bir eklenti
    • Bu yöntemle multitenancy sorununu çözüyor
  • empty_sqlite ile boş bir veritabanı oluşturma: CREATE TABLE people (name TEXT NOT NULL, database SQLITE DEFAULT execute_sqlite(empty_sqlite(), 'CREATE TABLE todos (task TEXT)'));
  • query_sqlite fonksiyonuyla sorgulama yapılabiliyor, execute_sqlite ile insert/update yapılabiliyor
    • SELECT * FROM query_sqlite(database, 'SELECT * FROM todos');
    • `UPDATE people SET database = execute_sqlite(database, 'INSERT INTO todos VALUES (''solve multitenancy'')') WHERE name = 'frectonz';
  • Belirli bir sütunu get_sqlite_text/get_sqlite_integer/get_sqlite_real fonksiyonlarıyla okuma: SELECT get_sqlite_text(sqlite_row, 0) FROM query_sqlite(database, 'SELECT * FROM todos');
  • Rust + Pgrx framework'ü ile yazılmış
  • Uygulama detayları:
    • Veritabanı, CBOR (Concise Binary Object Representation) ile kodlanmış Vec<u8> olarak saklanıyor
    • Sorgu çalıştırılırken /tmp klasöründe rastgele bir dosya oluşturuluyor. SQLite bu dosyayı yükleyip sorguyu çalıştırıyor ve sonucu, JSON ile kodlanmış değerler içeren tek satırlı bir tablo olarak döndürüyor

5 yorum

 
sms8377 2024-11-22

Vay be..

 
seunghaekim 2024-11-20

Aman Tanrım...

 
xguru 2024-11-20

Biraz tuhaf bir eklenti gibi duruyor ama ölçeklenebilir bir SaaS geliştirirken kullanıcının basitçe veritabanı işlevlerini gömmesi gereken durumlarda işe yarayabilir diye de düşünüyorum.

 
GN⁺ 2024-11-20
Hacker News yorumları
  • Çoğu ilişkisel veritabanı yönetim sistemi iç içe kayıtları desteklemiyor ve SQL de iç içe tablolar oluşturup kullanmak için yeterli özellik sunmuyor

    • Buna karşı çıkan ve "bu bakış açısı doğru değil" diyen bir görüş var
  • PostgreSQL veritabanı dizinini tar ile paketleyip SQLite içinde ikili blob olarak kodlama fikri öneriliyor

    • Pratik ya da özellikle faydalı görünmese de SQL veritabanlarını iç içe geçirme fikrini temsil ediyor
  • Bu fikrin kullanım senaryoları sorgulanıyor

    • Tipik bir üründe veritabanı şeması tasarlarken kullanmak zor görünüyor
    • Hibrit uygulamalarda yerel kullanıcı verilerini hesap bilgileriyle birlikte doğrudan yedeklemek için mi düşünüldüğü merak ediliyor
  • SQLite sütununun, SQLite'ın JSON sütunlarından daha iyi olacağı yönünde bir görüş var

    • JSON operatörleri ayrı bir sorgu dili öğrenmeyi gerektiriyor ve sınırlı kalıyor
  • /tmp dosya mekanizmasının biraz hack gibi göründüğü ve gerçekten gerekli olup olmadığı sorgulanıyor

    • SQLite bellek içi veritabanı oluşturup yedekleme API'si veya VACUUM INTO kullanarak ikili blob verisini yüklemek mümkün olabilir
  • PostgreSQL kullanılıyorsa, Row Level Security (RLS) ile multi-tenancy sorununun çözülebileceği belirtiliyor

    • Her tabloya tenant ID sütunu ekleyip yalnızca tek bir tenant'ın veriyi görebileceği politikalar tanımlamak oldukça kolay
  • 1NF (birinci normal form) suçu mu?

  • Operatör eksikliğine yönelik bir şikayet var

    • Birden fazla DATABASE sütunu arasında veritabanları arası join için indeksler ve kendine özgü bir operatör söz dizimi isteniyor