Auf HN vorgestellt: Triplit – Open-Source-Synchronisationsdatenbank für Server und Clients
(github.com/aspen-cloud)Überblick über Triplit
Triplit ist eine Open-Source-Datenbank, die Daten in Echtzeit zwischen Server und Browser synchronisiert. Sie wird als Typescript-Paket bereitgestellt, speichert Daten auf dem Server und synchronisiert sie intelligent mit den Clients.
- Echtzeit-Synchronisation: Bietet inkrementelle Updates und Konfliktauflösung auf Attributebene
- Lokales Caching: Läuft als clientseitige Datenbank
- Dauerhafter serverseitiger Speicher: Einschließlich Admin-Dashboard
- Plug-in-Speicheranbieter: Unterstützt SQLite, IndexedDB, LevelDB, Memory usw.
- Optimistische Updates: Sorgen für schnelle Interaktionen
- Relationale Abfragen: Unterstützt komplexe Datenmodelle
- Offline-Modus: Automatische Wiederverbindung und Konsistenzgarantie
- Rollback- und Retry-Management: Behandlung bei fehlgeschlagenen Updates
- Schema: Bietet Datensicherheit und Typescript-Autovervollständigung
- Berechtigungsverwaltung: Erzwingt Lese- und Schreibrechte auf dem Server
- Kollaboration/Multiplayer: Angetrieben durch CRDTs
- Geringe Latenz: Minimaler Netzwerkverkehr durch Delta-Patches
- Einfache API: Unterstützt Datenabfragen und -transformationen in Javascript und React
- Vollständig Open Source
Überblick über das Monorepo
triplit/packages enthält verschiedene Projekte, die Triplit antreiben:
- TriplitDB: Läuft in allen JS-Umgebungen wie Browser, Node, Deno und React Native und bietet schnelle, in Echtzeit aktualisierte Abfragen, während über das Netzwerk hinweg Konsistenz zwischen mehreren Schreibenden gewahrt bleibt
- Client: Browser-Bibliothek zur Interaktion mit lokalem und entferntem TriplitDB
- CLI: Stellt Befehle für Projekt-Scaffolding, das Starten einer Full-Stack-Entwicklungsumgebung, Server-Migrationen usw. bereit
- React: React-Bindings für @triplit/client
- Svelte: Svelte-Bindings für @triplit/client
- Console: App zur Anzeige und Transformation von Daten sowie zur Schema-Verwaltung für Triplit-Projekte
- Server: Node-Server zur Datensynchronisation zwischen Triplit-Clients
- Server-core: Protokollunabhängige Bibliothek zum Aufbau von Servern, auf denen Triplit läuft
- Docs: Mit Nextra erstellte Triplit-Dokumentation
- Types: Geteilte Typen für verschiedene Triplit-Projekte
- UI: Geteilte UI-Komponenten für Triplit-Frontend-Projekte, erstellt mit shadcn
Schnellstart
Neues Projekt starten:
npm create triplit-app@latest my-app
Abhängigkeiten zu einem bestehenden Projekt hinzufügen:
npm install --save-dev @triplit/cli
npm run triplit init
Schema definieren (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-Entwicklungs-Sync-Server starten:
npm run triplit dev
Umgebungsvariablen festlegen (.env-Datei):
VITE_TRIPLIT_SERVER_URL=http://localhost:6543
VITE_TRIPLIT_TOKEN=copied-in-from-triplit-dev
Abfrage in der App definieren (React-Beispiel):
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>
);
}
App starten, einen weiteren Browser-Tab öffnen und die Echtzeit-Datensynchronisation prüfen.
Meinung von GN⁺
- Triplit kombiniert Echtzeit-Synchronisation und lokales Caching, um eine schnelle und konsistente Nutzererfahrung zu bieten.
- Durch die Unterstützung verschiedener Speicheranbieter ist eine flexible Datenverwaltung möglich.
- Offline-Modus und automatische Wiederverbindung erhalten die Datenkonsistenz auch bei instabilen Netzwerkverbindungen.
- Die einfache API und die Unterstützung verschiedener Frameworks machen es entwicklerfreundlich.
- Allerdings können die Ersteinrichtung und die Verwaltung der Umgebungsvariablen etwas komplex sein.
1 Kommentare
Hacker-News-Kommentare
Erfahrungsbericht mit Triplit: Triplit wird in einem Projekt eingesetzt, und das Datenmodell passt gut zu einem verteilten (P2P-)Ansatz. Allerdings sind die Erstellung von Server-Auth-Tokens und die begrenzte Ausdrucksstärke der Query-Sprache etwas enttäuschend.
Vergleich mit Evolu: Unterschiede zwischen Triplit und Evolu sind unter anderem die
.subscribe()-Funktion von Triplit, die fortgeschrittenen Query-Funktionen von Evolu (SQL-basiert) und die jeweils im Browser verwendete Datenbankart.Offline-Sync und Schema-Evolution: Es besteht Interesse daran, wie Datenbanken mit Offline-Sync-Protokollen das Problem der Schema-Evolution lösen, wenn Clients unterschiedliche Versionen haben.
Zweifel daran, dass Clients direkt in die Datenbank schreiben: Es ist unklar, welche Art von Apps zulässt, dass Clients direkt in die Datenbank schreiben. Die gleiche Frage stellt sich auch bei Supabase und Firestore.
Verwaltung von Benutzereinstellungen mit Triplit: Triplit wird genutzt, um Benutzereinstellungen zu verwalten und sicherzustellen, dass die App auch offline gut funktioniert. Die schnelle Reaktion des Support-Teams hinterließ einen starken Eindruck.
Warum die AGPL-Lizenz gewählt wurde: Es besteht Neugier, warum Triplit sich für die AGPL-Lizenz entschieden hat.
Local-First-Ansatz: Ein Local-First-Ansatz wird in einer mobilen App verwendet, und im Vergleich zu anderen Lösungen stellt sich die Frage, warum Triplit eine Client-Server-Sync-Lösung anbietet.
Wunsch nach Rust-Bindings: Mit zusätzlichen Rust-Bindings könnte Triplit zusammen mit Tauri genutzt werden, was bei der Entwicklung von Offline-First-Apps helfen würde.
Erfahrungen mit Triplit in React Native: Triplit wird in einer React-Native-App verwendet, und die Query-Sprache, TypeScript-Unterstützung, Offline-Unterstützung und React-Native-Unterstützung werden sehr positiv bewertet. Auch Open Source und Self-Hosting sind Vorteile.
Die Zukunft der App-Entwicklung: Triplit wirkt wie die Zukunft der App-Entwicklung, aber es besteht Interesse an einem Vergleich mit RethinkDB und an den Gründen für dessen Scheitern.
Kombinationsmöglichkeit von MongoDB und Triplit: Es besteht die Frage, ob sich serverseitig MongoDB und auf der React-Seite Triplit verwenden lassen oder ob Triplit als neue Datenbank eingesetzt werden muss.