2 puan yazan GN⁺ 2024-06-27 | 1 yorum | WhatsApp'ta paylaş

Triplit'e genel bakış

Triplit, sunucu ile tarayıcı arasında verileri gerçek zamanlı olarak senkronize eden açık kaynaklı bir veritabanıdır. Typescript paketi olarak sunulur, verileri sunucuda depolar ve istemciye akıllı biçimde senkronize eder.

  • Gerçek zamanlı senkronizasyon: özellik düzeyinde artımlı güncellemeler ve çakışma çözümü sağlar
  • Yerel önbellekleme: istemci tarafı veritabanı olarak çalışır
  • Dayanıklı sunucu tarafı depolama: yönetici panosu içerir
  • Takılabilir depolama sağlayıcıları: SQLite, IndexedDB, LevelDB, Memory ve diğerlerini destekler
  • İyimser güncellemeler: hızlı etkileşim sağlar
  • İlişkisel sorgular: karmaşık veri modellerini destekler
  • Çevrimdışı mod: otomatik yeniden bağlanma ve tutarlılık garantisi
  • Geri alma ve yeniden deneme yönetimi: güncelleme başarısız olduğunda işlem yapar
  • Şema: veri güvenliği ve Typescript otomatik tamamlama sağlar
  • Yetki yönetimi: sunucuda okuma ve yazma izinlerini zorunlu kılar
  • İşbirliği/çok oyunculu: CRDTs ile çalışır
  • Düşük gecikme: delta patch'ler kullanarak ağ trafiğini en aza indirir
  • Basit API: Javascript ve React içinde veri sorgulama ve dönüştürmeyi destekler
  • Tamamen açık kaynak

Monorepo'ya genel bakış

triplit/packages, Triplit'i çalıştıran çeşitli projeleri içerir:

  • TriplitDB: tarayıcı, Node, Deno, React Native ve diğer tüm JS ortamlarında çalışabilir; ağ üzerinde birden çok yazarla tutarlılığı korurken hızlı ve gerçek zamanlı güncellenen sorgular sunar
  • Client: yerel ve uzak TriplitDB ile etkileşim kuran tarayıcı kütüphanesi
  • CLI: proje iskeleti oluşturma, full-stack geliştirme ortamı çalıştırma, sunucu migration'ları ve daha fazlası için komutlar sağlar
  • React: @triplit/client için React binding'leri
  • Svelte: @triplit/client için Svelte binding'leri
  • Console: Triplit projelerinin verilerini görüntüleme ve dönüştürme ile şema yönetimi uygulaması
  • Server: Triplit istemcileri arasında veri senkronizasyonu için Node sunucusu
  • Server-core: Triplit çalıştıran sunucular oluşturmak için protokolden bağımsız kütüphane
  • Docs: Nextra ile oluşturulmuş Triplit dokümantasyonu
  • Types: çeşitli Triplit projeleri için paylaşılan tipler
  • UI: shadcn ile oluşturulmuş Triplit frontend projeleri için paylaşılan UI bileşenleri

Hızlı başlangıç

Yeni bir proje başlatın:

npm create triplit-app@latest my-app

Mevcut projeye bağımlılık ekleyin:

npm install --save-dev @triplit/cli
npm run triplit init

Şemayı tanımlayın (my-app/triplit/schema.ts):

import { Schema as S, ClientSchema } from '@triplit/client';

export const schema = {
  todos: {
    schema: S.Schema({
      id: S.Id(),
      text: S.String(),
      completed: S.Boolean({ default: false }),
    }),
  },
} satisfies ClientSchema;

Triplit geliştirme senkronizasyon sunucusunu başlatın:

npm run triplit dev

Ortam değişkenlerini ayarlayın (.env dosyası):

VITE_TRIPLIT_SERVER_URL=http://localhost:6543
VITE_TRIPLIT_TOKEN=copied-in-from-triplit-dev

Uygulama içinde sorguyu tanımlayın (React örneği):

import { TriplitClient } from '@triplit/client';
import { useQuery } from '@triplit/react';
import { schema } from '../triplit/schema';

const client = new TriplitClient({
  schema,
  serverUrl: import.meta.env.VITE_TRIPLIT_SERVER_URL,
  token: import.meta.env.VITE_TRIPLIT_TOKEN,
});

function App() {
  const { results: todos } = useQuery(client.query('todos'));

  return (
    <div>
      {Array.from(todos.values()).map((todo) => (
        <div key={todo.id}>
          <input
            type="checkbox"
            checked={todo.completed}
            onChange={() =>
              client.update('todos', todo.id, (todo) => ({
                todo.completed = !todo.completed,
              }))
            }
          />
          {todo.text}
        </div>
      ))}
    </div>
  );
}

Uygulamayı başlatın, başka bir tarayıcı sekmesi açın ve gerçek zamanlı veri senkronizasyonunu doğrulayın.

GN⁺ görüşü

  • Triplit, gerçek zamanlı senkronizasyon ile yerel önbelleklemeyi birleştirerek hızlı ve tutarlı bir kullanıcı deneyimi sunar.
  • Çeşitli depolama sağlayıcılarını desteklediği için esnek veri yönetimi mümkündür.
  • Çevrimdışı mod ve otomatik yeniden bağlanma özellikleri, ağın kararsız olduğu durumlarda bile veri tutarlılığını korur.
  • Basit API'si ve farklı framework destekleri sayesinde geliştirici dostudur.
  • Ancak ilk kurulum ve ortam değişkeni yönetimi bir miktar karmaşık olabilir.

1 yorum

 
GN⁺ 2024-06-27
Hacker News yorumları
  • Triplit kullanım deneyimi paylaşımı: Triplit'i bir projede kullanıyorum ve veri modelinin dağıtık (P2P) yapıya iyi uyduğunu düşünüyorum. Ancak sunucu kimlik doğrulama token'ı oluşturma süreci ile sorgu dilinin ifade gücünün sınırlı olması hayal kırıklığı yaratıyor.

  • Evolu ile karşılaştırma: Triplit ile Evolu arasındaki farklar olarak Triplit'in .subscribe() özelliği, Evolu'nun gelişmiş sorgu özellikleri (SQL tabanlı) ve tarayıcıda kullandıkları veritabanı türünün farklı olması öne çıkıyor.

  • Çevrimdışı senkronizasyon ve şema evrimi: Çevrimdışı senkronizasyon protokolü kullanan bir veritabanında, istemci sürümleri farklı olduğunda şema evrimi sorununun nasıl çözüldüğü merak ediliyor.

  • İstemcinin veritabanına doğrudan yazması konusundaki soru işaretleri: İstemcinin veritabanına doğrudan yazmasına izin verilen uygulamaları anlamıyorum. Supabase ve Firestore için de aynı soru aklımda.

  • Triplit ile kullanıcı ayarlarını yönetme: Triplit'i kullanıcı ayarlarını yönetmek için kullanıyorum ve uygulamanın çevrimdışıyken de iyi çalışmasını sağlıyor. Destek ekibinin hızlı geri dönüşü etkileyiciydi.

  • AGPL lisansının seçilme nedeni: Triplit'in neden AGPL lisansını seçtiği merak ediliyor.

  • Local-first yaklaşımı: Mobile uygulamalarda local-first yaklaşımını kullanıyorum; diğer çözümlerle karşılaştırıldığında Triplit'in neden istemci-sunucu senkronizasyon çözümü sunduğu merak konusu.

  • Rust binding talebi: Rust binding eklenirse Tauri ile birlikte kullanılabilir ve bu da offline-first uygulama geliştirmede faydalı olur.

  • React Native'de Triplit kullanım deneyimi: Triplit'i bir React Native uygulamasında kullanıyorum; sorgu dili, TypeScript desteği, çevrimdışı destek ve React Native desteği çok iyi. Açık kaynak olması ve self-hosting imkanı da artı yönler.

  • Geleceğin uygulama geliştirmesi: Triplit, uygulama geliştirmenin geleceği gibi hissettiriyor; ancak RethinkDB ile karşılaştırması ve onların neden başarısız olduğuna dair görüşler merak ediliyor.

  • MongoDB ve Triplit'in birlikte kullanımı: Sunucu tarafında MongoDB, React tarafında ise Triplit kullanmanın mümkün olup olmadığı; yoksa Triplit'in yeni veritabanı olarak mı kullanılması gerektiği soruluyor.