- İstemci tarafı bir veritabanı olarak, Notion veya Figma gibi gerçek zamanlı iş birliği uygulamalarını kolayca oluşturmayı sağlar
- İlişkisel sorgular yazdığınızda Instant; veri getirme, yetki kontrolü ve çevrimdışı önbellekleme işlemlerini üstlenir
- Veri değiştiğinde optimistic update ve rollback işlemlerini de otomatik olarak yönetir
- Tüm sorgular varsayılan olarak çok oyunculu desteğiyle gelir
- İmleç veya çevrimiçi durumu gibi geçici güncellemeleri de destekler
- Şu anda Javascript, React ve React Native için SDK sunuyor
Geliştirme motivasyonu
- Modern uygulama geliştirme; sunucu kurulumu, veritabanı, önbellek, ORM, endpoint yapılandırması gibi pek çok iş gerektirir
- İstemci tarafı kod yazımı, durum yönetimi ve UI çizimi de gerekir
- Çok oyunculu özellik eklendiğinde stateful bir sunucuyu düşünmek gerekir; çevrimdışı mod desteğinde ise IndexedDB ve işlem kuyrukları dikkate alınmalıdır
- Her yeni özellikte model, endpoint, durum yönetimi ve UI tekrar tekrar yazılır
- 2021'de, UI mühendislerinin karşılaştığı sorunların çoğunun aslında veritabanı sorunu olduğunu fark ettiler
- İstemci tarafı bir veritabanı varsa, durum yönetimi, endpoint veya yerel önbelleği düşünmeden sadece sorgu yazmak yeterlidir
- Sorgular varsayılan olarak çok oyunculu desteğe sahipse, stateful sunucu konusunda endişelenmeye gerek kalmaz
- Veritabanı rollback destekliyorsa, optimistic update adeta ücretsiz gelir
- Bu yüzden Instant geliştirildi. Instant, istemcide kullanılabilen bir veritabanı sunarak UX oluşturmaya odaklanmayı sağlar
Mimariye genel bakış
- Instant, tüm kullanıcı verilerini tek büyük bir Postgres veritabanında üçlü biçimde depolar
- Çok kiracılı yapılandırmayla ücretsiz katman sunar
- Clojure ile yazılmış senkronizasyon sunucusu Postgres ile iletişim kurar
- Datalog ve GraphQL'e benzeyen InstaQL'i anlayan bir sorgu motoru yazılmıştır
- Asana'nın WorldStore'undan ve Figma'nın LiveGraph'ından ilham alınarak, Postgres'in WAL'ı izlenir; yeni veriler algılanır ve ilgili sorgular geçersiz kılınır
- Frontend tarafında istemci tarafı bir üçlü depo yazılmıştır
- SDK, web'de IndexedDB'ye, React Native'de ise AsyncStorage'a son sorgu önbelleğini kaydeder
- Tüm veriler, Google's CEL kütüphanesiyle çalışan bir yetkilendirme sistemi üzerinden işlenir
GN⁺ özeti
- Instant, gerçek zamanlı iş birliği uygulamalarını kolayca oluşturmayı sağlayan istemci tarafı bir veritabanıdır
- İlişkisel sorgularla veri getirme, yetki kontrolü ve çevrimdışı önbelleklemeyi otomatik olarak yönetir
- Çok oyunculu özellikler, optimistic update ve rollback desteğini varsayılan olarak sunar
- Asana ve Figma'dan ilham alarak Postgres'in WAL'ını izler, yeni verileri algılar ve ilgili sorguları geçersiz kılar
- İstemci tarafı üçlü depo ve yetkilendirme sistemi sayesinde veri yönetimini verimli biçimde gerçekleştirir
2 yorum
Supabase ile aynı çizgide gerçekten umut vadeden bir proje gibi görünüyor
Hacker News görüşleri
Firebase kurucusu: Instant’ın çevrimdışı, gerçek zamanlı, ilişkisel sorgu ve açık kaynak kombinasyonu heyecan verici. İlişkisel sorgular için çok fazla talep vardı. Firebase istemcisi açık kaynak, ancak arka ucunu açık kaynak yapma girişimi başarısız oldu
Geri bildirim: Kod örnekleri tam değil.
transactveuseQuery'nin nereden geldiği net değil. Küçük ayrıntılar önemlidirSelf-hosting mümkün mü?: Aracın bazı bölümlerinin self-hosting’e uygun olmaması sık görülen bir durum. Bunun açıkça belirtilmesi gerekir
Çevrimdışı öncelikli model için alternatif: PowerSync seçildi. WatermelonDB de iyi. ElectricSQL henüz yeterince olgun değil. CouchDB ve PocketDB güncel değil. Arka uç olarak PowerSync ve Supabase kullanılacak
CRUD uygulamalarıyla ilişkisi: CRUD uygulamaları ile InstantDB veya Firebase kavramı arasındaki ilişkiyi anlamak zor. İşbirlikçi metin düzenleyici için CRDT Javascript implementasyonu kullanılacak
Instant kullanım deneyimi: Instant 6 aydır kullanılıyor ve memnuniyet verici bulundu. Gerçek zamanlı, ilişkisel ve çevrimdışı özellikler önemliydi. Başka araçlar denendi ama başarısız olundu. Instant’tan sonra başka araç kullanılmadı
Yetki sistemi özeti: Firebase, veri getirme/güncelleme mantığı ile erişim politikalarını ayırır. Instant ise sorgu sonuçlarına göre yetki mantığını değerlendirir. Firebase, sorgu çalıştırılmadan önce güvenliği doğrular
Datalog motorunun açığa çıkarılıp çıkarılmayacağı: Özyinelemeli sorguları destekleyen başka Datalog motorları var. Sorgu önbelleği ve birleştirilebilirlik olup olmadığı soruluyor. Geçmişte Java tabanlı bir InstantDB ile aynı adı taşıyordu. Clojure ile uygulanmış diğer Datalog motorlarının listesi de veriliyor
ActiveRecord benzeri bir deneyim isteniyor: React/Vue/Solid içinde ActiveRecord benzeri bir şekilde çalışmak isteniyor. Nesne grafiği gibi bir API tercih ediliyor. SQL benzeri bir API istenmiyor. ORM’nin, bellekte tüm nesne grafiği varmış gibi davranması bekleniyor
Triple store performans sorunu: Sorguların çoğu tüm nesneyi veya aynı nesnenin birden çok alanını getirirken triple store iyi performans göstermiyor. Postgres de çok iyi sayılmaz. Bu konuda deneyim soruluyor