2 poin oleh GN⁺ 2024-06-27 | 1 komentar | Bagikan ke WhatsApp

Gambaran Umum Triplit

Triplit adalah database open source yang menyinkronkan data secara real-time antara server dan browser. Tersedia sebagai paket Typescript, menyimpan data di server dan menyinkronkannya ke klien secara cerdas.

  • Sinkronisasi real-time: menyediakan pembaruan inkremental dan penyelesaian konflik pada tingkat properti
  • Caching lokal: berjalan sebagai database sisi klien
  • Penyimpanan sisi server yang tahan lama: termasuk dashboard admin
  • Penyedia penyimpanan yang dapat dipasang: mendukung SQLite, IndexedDB, LevelDB, Memory, dan lainnya
  • Pembaruan optimistis: memberikan interaksi yang cepat
  • Query relasional: mendukung model data yang kompleks
  • Mode offline: menjamin rekoneksi otomatis dan konsistensi
  • Manajemen rollback dan retry: menangani saat pembaruan gagal
  • Skema: menyediakan keamanan data dan autocomplete Typescript
  • Manajemen izin: memaksa izin baca dan tulis di server
  • Kolaborasi/multiplayer: ditenagai oleh CRDTs
  • Latensi rendah: lalu lintas jaringan minimal menggunakan delta patch
  • API sederhana: mendukung query dan transformasi data di Javascript dan React
  • Sepenuhnya open source

Gambaran Umum Monorepo

triplit/packages berisi berbagai proyek yang menjalankan Triplit:

  • TriplitDB: dapat berjalan di semua lingkungan JS seperti browser, Node, Deno, dan React Native, serta menyediakan query yang cepat, real-time, dan diperbarui sambil menjaga konsistensi di seluruh jaringan dengan banyak penulis
  • Client: library browser untuk berinteraksi dengan TriplitDB lokal dan jarak jauh
  • CLI: menyediakan perintah untuk scaffolding proyek, menjalankan lingkungan pengembangan full-stack, migrasi server, dan lainnya
  • React: binding React untuk @triplit/client
  • Svelte: binding Svelte untuk @triplit/client
  • Console: aplikasi manajemen skema serta melihat dan mengubah data proyek Triplit
  • Server: server Node untuk sinkronisasi data antar klien Triplit
  • Server-core: library agnostik protokol untuk membangun server yang menjalankan Triplit
  • Docs: dokumentasi Triplit yang dibangun dengan Nextra
  • Types: tipe bersama untuk berbagai proyek Triplit
  • UI: komponen UI bersama untuk proyek frontend Triplit yang dibangun dengan shadcn

Mulai Cepat

Memulai proyek baru:

npm create triplit-app@latest my-app

Menambahkan dependensi ke proyek yang sudah ada:

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

Mendefinisikan skema (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;

Menjalankan server sinkronisasi pengembangan Triplit:

npm run triplit dev

Mengatur variabel lingkungan (file .env):

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

Mendefinisikan query di aplikasi (contoh React):

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>
  );
}

Jalankan aplikasi, buka tab browser lain, lalu periksa sinkronisasi data real-time.

Pendapat GN⁺

  • Triplit menggabungkan sinkronisasi real-time dan caching lokal untuk memberikan pengalaman pengguna yang cepat dan konsisten.
  • Mendukung berbagai penyedia penyimpanan sehingga pengelolaan data menjadi fleksibel.
  • Mode offline dan fitur rekoneksi otomatis menjaga konsistensi data bahkan dalam kondisi jaringan yang tidak stabil.
  • API yang sederhana dan dukungan untuk berbagai framework membuatnya ramah bagi developer.
  • Namun, pengaturan awal dan pengelolaan variabel lingkungan bisa agak rumit.

1 komentar

 
GN⁺ 2024-06-27
Komentar Hacker News
  • Berbagi pengalaman menggunakan Triplit: Sedang menggunakan Triplit dalam proyek, dan model datanya cocok untuk pendekatan terdistribusi (P2P). Namun, pembuatan token autentikasi server dan kurang ekspresifnya bahasa kueri terasa kurang memuaskan.

  • Perbandingan dengan Evolu: Perbedaan Triplit dan Evolu antara lain fitur .subscribe() milik Triplit, fitur kueri tingkat lanjut Evolu (berbasis SQL), serta jenis database yang digunakan di browser.

  • Sinkronisasi offline dan evolusi skema: Penasaran bagaimana masalah evolusi skema diselesaikan pada database yang menggunakan protokol sinkronisasi offline ketika versi klien berbeda-beda.

  • Keraguan tentang klien menulis langsung ke database: Sulit memahami aplikasi yang mengizinkan klien menulis langsung ke database. Keraguan yang sama juga ada terhadap Supabase dan Firestore.

  • Pengelolaan pengaturan pengguna dengan Triplit: Menggunakan Triplit untuk mengelola pengaturan pengguna, sehingga aplikasi tetap berjalan baik meski offline. Respons cepat dari tim dukungan sangat mengesankan.

  • Alasan memilih lisensi AGPL: Penasaran mengapa Triplit memilih lisensi AGPL.

  • Pendekatan local-first: Sedang menggunakan pendekatan local-first untuk aplikasi mobile, dan ingin tahu mengapa Triplit menyediakan solusi sinkronisasi klien-server dibanding solusi lain.

  • Permintaan binding Rust: Jika binding Rust ditambahkan, Triplit bisa digunakan bersama Tauri dan akan membantu pengembangan aplikasi offline-first.

  • Pengalaman menggunakan Triplit di React Native: Sedang menggunakan Triplit di aplikasi React Native, dan bahasa kueri, dukungan TypeScript, dukungan offline, serta dukungan React Native sangat baik. Sifat open source dan kemungkinan self-hosting juga menjadi kelebihan.

  • Masa depan pengembangan aplikasi: Triplit terasa seperti masa depan pengembangan aplikasi, tetapi penasaran bagaimana perbandingannya dengan RethinkDB dan alasan kegagalan mereka.

  • Kemungkinan menggabungkan MongoDB dan Triplit: Penasaran apakah MongoDB bisa digunakan di sisi server dan Triplit di sisi React, atau apakah Triplit harus digunakan sebagai database baru.