5 puan yazan GN⁺ 2023-12-02 | 1 yorum | WhatsApp'ta paylaş

Veri yönetiminin karmaşıklığı

  • Frontend mühendisleri, API verilerini önbelleğe alma ihtiyacını fark eder.
  • Başta basit veri depolamayla başlanır, ancak özellik talepleri arttıkça veri önbelleği, manuel indeksler, iyimser mutasyonlar (optimistic mutations), özyinelemeli önbellek geçersizleştirme gibi yapılar uygulanmaya başlanır.
  • Bu özellikler veritabanlarının iç işleyişine benzer ve karmaşık frontend uygulamalarında sonunda alanına özgü bir veritabanı inşa edilmiş olur.

Önbelleğin temelleri

  • API istek sonuçlarını yerel değişkenlerde saklamakla başlanır.
  • Bildirimsel framework kullanan web uygulamalarında gereksiz API isteklerini önlemek için veriler değişkenlerde tutulur.
  • Sonraki adım, önbelleği daha üst bir katmana taşımak veya UI ağacının dışına çıkarmaktır.

İndekslerle hız kazanma

  • Veriyi belirli bir şekilde organize ederek uygulamanın yapması gereken iş azaltılabilir ve kullanıcı deneyimi iyileştirilebilir.
  • Frontend veri optimizasyonunun, veritabanı depolama sistemlerinin iç işleyişine benzediği görülür.
  • Veri yapısı; verileri ID'ye göre saklayıp, öğeleri tarihe göre hızlıca sorgulamayı sağlayan indeksler oluşturarak iyileştirilir.

İyimser mutasyonlar

  • Sunucu yanıtını beklemeden, belirli bir işlemin etkisini yerelde simüle etmektir.
  • Bu, kullanıcı arayüzünün anında tepki veriyormuş gibi görünmesini sağlar; ancak sunucuda farklı bir sonuç çıkarsa UI'ın değişiklikleri geri alması gerekir.
  • İstemci ile sunucu arasındaki mantığı kopyalama, asenkron hataları ele alma ve uygulama yeniden başlatıldıktan sonra değişiklikleri uzlaştırma gibi zorluklar vardır.

Özyinelemeli önbellek geçersizleştirme

  • Veri, önbelleğin birden çok yerinde görünebilir; bu yüzden güncellemeden sonra önbelleğin sunucuyla uyumlu olacak şekilde doğru biçimde geçersizleştirilmesi gerekir.
  • UI'ın, her mutasyonla önbelleğin hangi bölümlerinin ilişkili olduğunu bilmesi gerekir ve bu yaklaşım ölçek büyüdükçe kırılgan hale gelebilir.
  • İyimser mutasyonlarla birleştiğinde, sunucu değişikliklerini istemci tarafında tahmin etmek için sunucu mantığını kopyalamak daha da zorlaşır.

Veritabanı mı kuruyorsunuz?

  • Yeterince karmaşık frontend uygulamalarında, sonunda çok sayıda veri yönetimi özelliği inşa edilir; bu da kullanıcıları memnun eden ve iş problemlerini çözen asıl işlerden zaman çalar.
  • Yazı, frontend için optimize edilmiş bir veritabanı yığınına alternatif bir yaklaşım sunuyor.

SQLSync'e giriş

  • SQLite tabanlı, frontend için optimize edilmiş bir veritabanı yığını olan SQLSync geliştirildi.
  • SQLSync, veri yönetimi sorunlarını çözmek ve geliştiricilerin uygulamanın kendine özgü özelliklerine odaklanabilmesini sağlamak için tasarlandı.
  • SQLSync; kalıcı önbellek, SQLite'ın tüm yetenekleri, iyimser mutasyonlar, akıllı önbellek geçersizleştirme ve reaktif sorgular sunar.

GN⁺ görüşü

Bu yazıdaki en önemli nokta, frontend uygulamalarının karmaşıklığı arttıkça geliştiricilerin veritabanına benzer işlevleri kendi başlarına uygulamak zorunda kalmasıdır. Bu tür işler geliştiricinin zamanını tüketir ve kullanıcıya gerçekten değer sunan özelliklerin geliştirilmesinden uzaklaştırır. SQLSync gibi frontend için optimize edilmiş veritabanı yığınları, bu sorunu çözmeye yönelik yenilikçi bir yaklaşım ortaya koyuyor. Yazıyı ilgi çekici kılan şey, mevcut veri yönetimi yöntemlerindeki temel soruna işaret etmesi ve geliştiricilerin daha verimli çalışabileceği yeni bir çözüm aramasıdır.

1 yorum

 
GN⁺ 2023-12-02
Hacker News görüşü
  • Projeyi ortaya çıkaran arkadaşın anlaşılması

    • SQLsync, frontend geliştiricilerinin tarayıcı içinde uzak veritabanını sorgulayıp güncelleyebilmesini sağlayan bir araçtır.
    • WASM gücünü kullanarak SQLite veritabanını tarayıcıya gönderme yöntemiyle çalışır.
    • Birden fazla istemci arasındaki senkronizasyon için reaktif bir algoritma kullanır.
    • Geliştiricilerin veri senkronizasyonu işini yenilikçi biçimde çözen bir yaklaşımdır.
  • Geçmişte bir şirkette kullanılan proje yönetim yazılımı deneyimi

    • Verileri senkronize etmek için check-in/check-out mekanizması kullanılıyordu, ancak gerçek zamanlı güncelleme uygulamaları ortaya çıkınca bu yaklaşım eski moda görülmeye başlandı.
    • 10 yıl boyunca SPA web uygulamaları geliştirme deneyiminden bakınca, bu tür veri senkronizasyon mekanizmalarının zamanının ötesinde olduğu hissediliyor.
  • SPA bırakılınca ortadan kalkan sorunlar

    • Hotwire veya htmx gibi çözümler kullanıldığında sunucu sorguları basitleşiyor ve bunları hızlandırma problemi daha iyi anlaşılıyor.
  • SQLSync yaratıcısının görüşü

    • Pek çok soruyu yanıtlıyor ve gözden kaçan soruları da düzenli olarak kontrol etmeyi planlıyor.
    • SQLSync'i yapma motivasyonuna odaklanan ilk gönderi üzerine yapılan tartışmadan memnun.
    • Bir sonraki gönderide SQLSync'in nasıl çalıştığını anlatmayı planlıyor.
  • Kullanıcıya gerçeklikten farklı bir zihinsel model vermemek

    • Veritabanı senkronizasyonu, istemci-sunucu modelinden daha karmaşık olabilir.
    • Hızlı bir UI gerektiğinde CRDT yapı taşlarını kullanmanın daha güvenli olduğu düşünülüyor.
  • Ölçülebilenin yönetildiği ilkesi ve batık maliyet yanılgısı

    • Sorun, veritabanının karmaşıklığıdır.
    • Sorun SQL sözdizimidir; temel ilişkisel veritabanı kullanımı keyifli bir deneyim olsaydı, kendi veritabanını yapmak yerine bir DB kullanma cazibesi daha güçlü olurdu.
    • İyi bir veritabanı SQL kullanır ve verimlilik için veritabanı dilini kullanmak gerekir.
  • İstemci ile sunucu arasında durum senkronizasyonu sorunu

    • PHP/SSR modeline dönülürse, UX'ten ödün vererek bu sorunun etrafından dolaşılabilir.
    • SPA iyidir, ama çok parçalı form gönderimi de hâlâ çalışır.
    • Tüm durumu sunucuda tutup istemciyi basit bir terminal gibi ele almak, geliştirme deneyimini iyileştirir.
  • ORM kütüphaneleriyle karşılaştırma

    • Tarayıcıda desteklenen TypeORM ve SQL.js'yi doğrudan kullanmakla SQLsync'i karşılaştıran bir soru.
  • Frontend ve backend veritabanları arasındaki fark

    • Frontend veritabanı backend'den farklı olabilir ve istemcide gerçek zamanlı durumu daha iyi yönetme ihtiyacı vardır.
    • react query ve WebSocket kullanarak cache invalidation üzerinde düşünüyor.
    • SQLsync fikri de değerlendirmeye değerdir.
  • SignalDB ile benzer bir deneme

    • SignalDB, sinyaller aracılığıyla reaktiviteyi ve framework'ten bağımsız, MongoDB benzeri bir sorgu sözdizimini kullanır.