La base de donnees complete

Barrel

Une base de donnees edge-AI embarquable. Un document, ses pieces jointes et son vecteur vivent sous un seul id, ainsi la memoire d'un agent tient en une seule ecriture et une seule lecture.

Un enregistrement, trois formes

Pas de code de liaison entre un stockage documentaire et un index vectoriel separe. C'est un seul enregistrement.

Document

JSON sans schema avec MVCC a vecteurs de version, requetes BQL et un flux de changements.

Blobs

Pieces jointes streamees et adressees par contenu, repliquees sur leur propre flux.

Vecteur

Auto-embarque ou fournissez le votre, interrogeable en vectoriel, BM25 et hybride.

Mode enregistrement

Ecrivez du texte, obtenez un embedding. Une politique embarque les documents automatiquement a l'ecriture.

Requetes BQL

Un dialecte PartiQL sur documents, vecteurs et recherche par mots-cles, avec abonnements en direct.

Timeline

Creez une branche d'une base de donnees, restaurez a un instant precis, et fusionnez les branches.

Chiffrement au repos

AES-256-GCM, cles par base de donnees et un fournisseur de cles enfichable.

Sync et replication

Les vecteurs de version HLC convergent sans coordinateur, en ponctuel ou en continu.

Couche agent

Espaces, jetons de capacite, sessions et transferts via REST et MCP.

Executez-le a votre facon

Embarque

Une bibliotheque dans votre app Erlang ou Elixir. Pas de processus separe.

Serveur

barrel_server expose REST/JSON et MCP sur la meme base de donnees.

Navigateur

barrel-lite synchronise une copie offline-first dans le navigateur.

Demarrage Rapide

%% Open a database; text is auto-embedded into a vector
{ok, _} = barrel:open(<<"notes">>, #{embedding => #{provider => openai}}).

%% One write stores the document, its vector, and its blobs under one id
{ok, _} = barrel:put_doc(<<"notes">>, #{
    <<"id">>    => <<"n1">>,
    <<"title">> => <<"Design review">>,
    <<"text">>  => <<"Ship the edge sync protocol">>
}).

%% Query with BQL
{ok, Rows, _} = barrel:query(<<"notes">>,
    <<"SELECT id, title FROM db WHERE title LIKE 'Design%'">>).

%% Vector search over the same records
{ok, Hits, _} = barrel:query(<<"notes">>,
    <<"SELECT id, _score FROM vector_top_k('edge sync', k => 5) AS v">>).
# barrel_server place la meme base derriere REST et MCP.
$ curl -X PUT localhost:8080/db/notes
{"ok":true,"db":"notes"}

$ curl -X PUT localhost:8080/db/notes/doc/n1 \
    -H 'content-type: application/json' \
    -d '{"title":"Design review","text":"Ship the edge sync protocol"}'
{"id":"n1","ok":true,"rev":"0000019f46b4c08900000000@8c0010c983917d4b"}

$ curl localhost:8080/db/notes/doc/n1
{"_rev":"0000019f46b4c08900000000@8c0010c983917d4b","id":"n1","title":"Design review",...}

# Recherche vectorielle sur les memes enregistrements.
$ curl -X POST localhost:8080/db/notes/search/vector \
    -H 'content-type: application/json' -d '{"vector":[0.1,0.2,0.3],"k":5}'

Quand l'Utiliser

Utilisez Barrel quand :

  • + Vous voulez documents, blobs et vecteurs sous un seul id
  • + Vous construisez des agents qui ont besoin de memoire et de recherche
  • + Vous avez besoin d'un deploiement offline-first ou en edge
  • + Vous voulez embarquer la base de donnees, pas gerer un cluster

Considerez des alternatives quand :

  • + Vous avez besoin d'un grand cluster distribue
  • + Vous etes engage sur un moteur SQL existant unique
  • + Vous n'avez besoin que d'une couche (utilisez alors juste cette bibliotheque)