Il vous suffit d'écrire des requêtes relationnelles dans le format des données que vous souhaitez et Instant s'occupe de la récupération des données, de la vérification des autorisations et de la mise en cache hors ligne. Lorsque vous modifiez des données, les mises à jour optimistes et les rollbacks sont également gérés pour vous. De plus, chaque requête est multijoueur par défaut.
Instant prend également en charge les mises à jour éphémères, comme les curseurs ou les who's online. La base de données dispose actuellement de SDK pour Javascript, React et React Native.
A quoi cela ressemble-t-il ? Voici une application de chat dépouillée en une douzaine de lignes :
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | // ༼ つ ◕_◕ ༽つ Real-time Chat // ---------------------------------- // * Updates instantly // * Multiplayer // * Works offline import { init, tx, id } from "@instantdb/react"; const db = init({ appId: process.env.NEXT_PUBLIC_APP_ID, }); function Chat() { // 1. Read const { isLoading, error, data } = db.useQuery({ messages: {}, }); // 2. Write const addMessage = (message) => { db.transact(tx.messages[id()].update(message)); }; // 3. Render! return <UI data={data} onAdd={addMessage} />; } |
Motivation
L'écriture d'applications modernes est pleine d'embûches. La plupart du temps, vous commencez par le serveur : mise en place des bases de données, des caches, des ORM et des points d'accès. Ensuite, vous écrivez du code côté client : magasins, sélecteurs, mutateurs. Enfin, vous peignez un écran. Si vous ajoutez le multijoueur, vous devez penser aux serveurs avec état, et si vous supportez le mode hors ligne, vous devez penser à IndexedDB et aux files d'attente de transactions.
Pour aggraver les choses, chaque fois que vous ajoutez une nouvelle fonctionnalité, vous reprenez la même chanson et la même danse encore et encore : ajouter des modèles, écrire des points de terminaison, des magasins, des sélecteurs, et enfin l'interface utilisateur.
Peut-on faire mieux ?
En 2021, il est apparu que la plupart des problèmes auxquels les ingénieurs UI sont confrontés sont en fait des problèmes de base de données déguisés.
Si vous disposiez d'une base de données sur le client, vous n'auriez pas besoin de penser aux magasins, aux sélecteurs, aux points de terminaison ou aux caches locaux : il vous suffirait d'écrire des requêtes. Si ces requêtes étaient multijoueurs par défaut, vous n'auriez pas à vous soucier des serveurs avec état. Et si votre base de données supportait le rollback, vous obtiendriez des mises à jour optimistes gratuitement.
Instant a donc été créé. Instant vous donne une base de données que vous pouvez utiliser dans le client, afin que vous puissiez vous concentrer sur ce qui est important : construire une excellente UX pour vos utilisateurs, et le faire rapidement.
Vue d'ensemble de l'architecture
Voici comment Instant fonctionne à un haut niveau :
Sous le capot, toutes les données des utilisateurs sont stockées sous forme de triples dans une grande base de données Postgres. Une configuration multi-tenant permet d'offrir un niveau gratuit qui ne s'interrompt jamais.
Un serveur de synchronisation écrit en Clojure communique avec Postgres. Un moteur de requête a été écrit, qui comprend le datalog et InstaQL, un langage relationnel qui ressemble beaucoup à GraphQL :
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 | // give me all users, their posts and comments { users: { posts: { comments: { } } } } |
En s'inspirant du WorldStore d'Asana et du LiveGraph de Figma, le WAL de postgres a été adapté pour détecter les nouveautés et invalider les requêtes pertinentes.
Pour le frontend, un triplestore côté client a été écrit. Le SDK gère la persistance d'un cache de requêtes récentes vers IndexedDB sur le web, et AsyncStorage dans React Native.
Toutes les données passent par un système de permission alimenté par la bibliothèque CEL de Google.
Pour débuter
La façon la plus simple de commencer avec Instant est de s'inscrire sur instantdb.com. Vous pouvez créer une application fonctionnelle en 5 minutes ou moins.
Source : InstantDB
Et vous ?
Avez-vous utilisé cet outil ou un outil similaire pour votre usage ou le développement d'applications, et si oui qu'en pensez-vous ?
Trouvez-vous InstantDB fiable et utile ?
Voir aussi :
Comment nous avons économisé 98 % des coûts du cloud en écrivant notre propre base de données, par Hivekit
SQLite, la base de données la plus utilisée au monde, est 35 % plus rapide que le système de fichiers, et utilise environ 20 % d'espace disque en moins que le stockage des blobs dans des fichiers individuels