Liberium DB
Base de données distribuée NoSQL, compatible Firestore, conçue pour la performance et le temps réel.
Introduction
Liberium DB est un système de stockage de documents hautement disponible. Il utilise une architecture multi-tenant native, permettant de séparer logiquement les données de vos différents environnements ou clients.
Points Forts
- Temps Réel : Abonnements via WebSockets pour des mises à jour instantanées.
- Standard Firestore : API quasi-identique pour une adoption immédiate.
- Souveraineté : Hébergé sur notre propre infrastructure distribuée.
- Atomicité : Support complet des transactions et des écritures par lots (Batches).
Initialisation du SDK
Le SDK peut être utilisé dans le navigateur ou dans un environnement Node.js.
// Import via script tag (Browser)
<script src="https://liberium.net/sdk.js"></script>
// Initialisation
const db = new LiberiumDB({
url: 'https://liberium.net',
tenantId: 'votre-tenant-id',
apiKey: 'votre-cle-api'
});Modèle de Données
Les données sont organisées en Collections qui contiennent des Documents.
Collections
Conteneurs de documents. Pas de schéma rigide requis.
db.collection('users')Documents
L'unité de base. Stocké au format JSON.
await docRef.get()Opérations de Base
Ajouter/Écraser un document
La méthode set() crée ou remplace complètement un document.
await db.collection('posts').doc('my-post-id').set({
title: 'Hello Liberium',
content: 'Ceci est mon premier post',
createdAt: LiberiumSentinels.serverTimestamp()
});Mettre à jour partiellement
La méthode update() ne modifie que les champs spécifiés.
await db.collection('posts').doc('my-post-id').update({
status: 'published'
});Temps Réel (Abonnements)
Recevez des notifications dès qu'une donnée change dans la base.
// Écouter un document spécifique
db.collection('chats').doc('general').onSnapshot((doc) => {
console.log("Nouveau message:", doc.data());
}, (error) => {
console.error("Erreur d'écoute:", error);
});
// Écouter une requête entière
db.collection('tasks')
.where('status', '==', 'pending')
.onSnapshot((querySnapshot) => {
querySnapshot.forEach(doc => {
console.log(doc.id, " => ", doc.data());
});
});Transactions et Atomicité
Transactions
Utilisez les transactions pour les opérations qui dépendent de la valeur actuelle d'un document (ex: compteur).
await db.runTransaction(async (transaction) => {
const docRef = db.collection('stats').doc('counters');
const sfDoc = await transaction.get(docRef);
const newPopulation = (sfDoc.data().population || 0) + 1;
transaction.update(docRef, { population: newPopulation });
});Types de données et Sentinelles
En plus des types JSON standards, nous supportons des valeurs spéciales :
LiberiumSentinels.serverTimestamp(): Horodatage serveur.LiberiumSentinels.deleteField(): Supprime un champ lors d'un update.LiberiumSentinels.increment(n): Incrémente une valeur numériquement.LiberiumSentinels.arrayUnion(...items): Ajoute des éléments à un tableau s'ils n'existent pas.