Barrel Docs
La couche documentaire. MVCC a vecteurs de version, requetes BQL, pieces jointes, un flux de changements et replication. Utilisez-la au sein du Barrel complet, ou de maniere autonome comme bibliotheque embarquable.
Capacites Principales
Tout ce dont vous avez besoin pour le stockage de documents, les requetes et la synchronisation distribuee.
MVCC
Concurrence multi-version avec des vecteurs de version HLC.
- + Causal, sans coordinateur
- + Historique conserve
- + Conflits conserves, avec un hook de fusion
Requetes BQL
Un dialecte PartiQL avec indexation automatique des chemins.
- + Indexation auto des chemins
- + Pas d'index manuels
- + Abonnements en direct
Replication
Sync multi-master avec politiques de replication.
- + Chain, Group, Fanout
- + Replication filtree
- + Ponctuelle ou continue
Abonnements
Notifications temps reel via patterns style MQTT.
- + Patterns de chemins
- + Abonnements requetes
- + Flux de changements
Timeline
Branches, restauration a un instant precis, et fusion des branches
TTL et retention
Expirez les documents et limitez l'historique conserve
Pieces Jointes
Blobs adresses par contenu, streames et repliques
Ordonnancement HLC
Horloges Logiques Hybrides pour coordination distribuee
Provenance et audit
Chaque ecriture enregistre l'acteur, la session et la source
Embarquable
Utilisez comme bibliotheque dans les apps Erlang/Elixir
Politiques de Replication
Chain
A → B → C
Replication sequentielle avec ecritures synchrones
Group
A ↔ B ↔ C
Multi-master avec resolution de conflits
Fanout
A → B, C, D
Distribution d'evenements vers plusieurs cibles
Cas d'Usage
Edge Computing
Deployez des noeuds qui synchronisent vers le cloud quand connectes
Multi-Region
Repliquez les donnees entre regions avec resolution de conflits
Applications offline-first
Ecritures locales qui convergent au retour en ligne
Distribution d'Evenements
Patterns fan-out pour architectures event streaming
Demarrage Rapide
%% Start the application
application:ensure_all_started(barrel_docdb).
%% Create a database
{ok, _} = barrel_docdb:create_db(<<"mydb">>).
%% Put a document
{ok, #{<<"id">> := Id}} = barrel_docdb:put_doc(<<"mydb">>, #{
<<"type">> => <<"user">>, <<"name">> => <<"Alice">>
}).
%% Query with BQL
{ok, Rows, _} = barrel_docdb:query(<<"mydb">>,
<<"SELECT * FROM db WHERE type = 'user'">>).
%% Subscribe to changes (MQTT-style patterns)
{ok, _Ref} = barrel_docdb:subscribe(<<"mydb">>, <<"type/user/#">>). # barrel_docdb est embarque uniquement. Lancez barrel_server pour une surface HTTP.
$ curl -X PUT localhost:8080/db/mydb
{"ok":true,"db":"mydb"}
$ curl -X PUT localhost:8080/db/mydb/doc/alice \
-H 'content-type: application/json' -d '{"type":"user","name":"Alice"}'
{"id":"alice","ok":true,"rev":"0000019f46b4c08900000000@8c0010c983917d4b"}
# BQL via HTTP.
$ curl -X POST localhost:8080/db/mydb/query \
-H 'content-type: application/json' \
-d '{"query":"SELECT * FROM db WHERE type = '"'"'user'"'"'"}'
# Le flux de changements, en JSON ou en Server-Sent Events.
$ curl localhost:8080/db/mydb/changes
$ curl -H 'accept: text/event-stream' localhost:8080/db/mydb/changes Pour une surface REST/JSON ou MCP, executez barrel_server sur la meme base de donnees.
Quand l'Utiliser
Utilisez Barrel Docs quand :
- + Besoin de versionnement et d'historique des documents
- + Offline-first ou sync requis
- + Sync multi-appareils ou multi-region necessaire
- + Embarque dans app Erlang/Elixir
Considerez des alternatives quand :
- + Un simple key-value suffit
- + Besoin de SQL relationnel complet
- + Traversee de graphes comme charge principale
- + Vous avez aussi besoin de vecteurs (utilisez alors le Barrel complet)
Un enregistrement avec vecteurs
Dans le Barrel complet, un document et son embedding partagent un seul id, il n'y a donc pas de code d'integration entre un stockage documentaire et un index vectoriel separe. Stockez du texte, obtenez la recherche.
Decouvrir Barrel →