DocumentService
Gère les collections documentaires, les recherches exactes, la pagination et la requête QueryDoc.
- PutDoc
- GetDoc
- DeleteDoc
- FindByField
- ListDoc
- QueryDoc

RociaDB permet de structurer des données métier en documents, de relier des entités via un graphe, puis d’associer des fichiers au même contexte. Cette page pose une première base de documentation publique: concepts, intégration, SDKs, sécurité et bonnes pratiques d’usage.
Comment la plateforme s’intègre dans un usage SaaS multi-tenant.
ModelsDocument · Graphe · FichierLes trois modèles et la manière de les combiner dans un flux métier.
APIAPI & SDKsMéthodes, pagination, requêtes documentaires et exemples clients.
ObservabilityMonitoring & tracingPrometheus, Grafana, Jaeger et logs corrélés pour exploiter la plateforme.
Un schéma de lecture rapide pour comprendre comment une application SaaS dialogue avec la plateforme et organise ses données.
Gère les collections documentaires, les recherches exactes, la pagination et la requête QueryDoc.
Expose les nœuds, les arêtes et les traversées paginées, avec des IDs fournis par le client.
Prend en charge les fichiers chunkés, les métadonnées et la visibilité atomique via commit marker.
La plateforme sépare volontairement document, graphe et fichier. Leur combinaison est explicite et portée par le client.
Quand un objet doit aussi être traversé dans le graphe, le client crée également un nœud correspondant.
Il n’y a pas de suppression de nœud exposée dans le proto v1. Le nettoyage des arêtes reste explicite côté client.
Un fichier n’est visible qu’après écriture du commit final. Les uploads partiels orphelins sont éligibles au GC.
Les interactions sont exposées via des services orientés document, graphe et fichier, pensés pour des usages applicatifs et des workflows d’intégration.
Écriture, lecture, suppression et recherche dans une collection avec pagination et total_count.
PutDoc · GetDoc · DeleteDoc · ListDocCréation de nœuds et arêtes, puis traversée paginée dans les deux sens via des voisins ordonnés.
PutNode · AddEdge · NeighborsOut · NeighborsInUpload streamé, téléchargement streamé, lecture de métadonnées et suppression logique.
Upload · Download · Stat · DeleteLes listes utilisent `PageRequest(limit, cursor)` et renvoient `next_cursor` opaque.
cursor opaque`QueryDoc` complète `ListDoc` et `FindByField` pour les cas où plusieurs filtres, un tri stable et une pagination sur résultat filtré sont nécessaires.
V1 supporte `EQ` et `IN` uniquement, combinés en `AND`.
Tri explicite + tie-breaker stable `id asc` si absent.
Cursor opaque à rejouer tel quel sur la page suivante.
Le serveur renvoie `total_count` avant pagination.
QueryDocRequest {
tenant_id: "tenant-a",
collection: "users",
filters: [
{
field: "organization_id",
operator: QUERY_OPERATOR_EQ,
values_json: ["\"org-1\""]
},
{
field: "status",
operator: QUERY_OPERATOR_IN,
values_json: ["\"active\"", "\"draft\""]
}
],
sort: [
{ field: "name", direction: SORT_DIRECTION_ASC }
],
page: { limit: 50, cursor: "" }
}Cette section rassemble les éléments publics utiles pour exploiter la plateforme proprement dans un contexte SaaS, sans entrer dans les détails internes d’implémentation.
Claims requis: `iss`, `sub`, `tenant_id`, `exp`, `iat`.
Validation contre un issuer configuré et un jeu de clés publiques JWKS avec rotation.
`aud` est vérifié si configuré côté service.
Le `tenant_id` fait partie du contrat applicatif et structure l’isolation des données.
La plateforme distingue la configuration d’environnement, les secrets et les paramètres de sécurité.
Les clés et secrets doivent rester hors du code applicatif et être injectés par l’environnement.
Logs, métriques et suivi des erreurs sont à prévoir pour exploiter la plateforme proprement.
Pour un usage SaaS, l’important est de cadrer les environnements, l’authentification, la stratégie de modélisation et l’observabilité. Les détails d’outillage interne restent volontairement hors de cette documentation publique.
Isoler un tenant, choisir un environnement de travail et configurer les accès.
Définir ce qui relève du document, du graphe et du fichier dans votre cas métier.
Brancher un SDK ou un client gRPC à votre backend, à vos jobs ou à vos outils.
Suivre les flux, tracer les erreurs et faire évoluer le modèle progressivement.
La plateforme est pensée pour s’intégrer dans une chaîne d’observabilité standard: Prometheus pour les métriques, Grafana pour les dashboards, Jaeger pour le tracing distribué.
Les métriques sont exportées au format Prometheus via `/metrics`. Elles couvrent le volume de requêtes, la latence, les scans d’index et les flux de fichiers.
Le tracing distribué repose sur OpenTelemetry. Chaque requête peut porter un trace ID propagé dans les métadonnées gRPC puis corrélé avec les journaux.
Grafana s’appuie naturellement sur Prometheus pour construire les dashboards SLO, suivre les p95/p99 et visualiser les incidents ou dégradations.
Les métriques publiques les plus structurantes concernent le trafic, la latence, l’indexation et les flux de fichiers. Elles sont pensées pour alimenter des dashboards transverses et des alertes d’exploitation.
/metricsLes logs sont structurés en JSON afin de relier facilement une erreur, une requête, un tenant et un chemin d’exécution. Le `trace_id` permet de naviguer entre logs et traces.
Construire des tableaux de bord d’usage, suivre les SLO, identifier les régressions et investiguer plus vite sans exposer les détails d’implémentation aux clients finaux.
Prometheus + Grafana + JaegerUne base de présentation pour Python, TypeScript et Rust, alignée sur les primitives réelles du proto.
pip install rociadb
client.documents.put(
tenant_id="tenant-a",
collection="users",
id="user-123",
json={"status": "active", "organization_id": "org-1"},
request_id="req-001",
)npm install @rociadb/sdk
await client.graph.addEdge({
tenantId: "tenant-a",
graph: "crm",
edgeId: "edge-001",
from: "user-123",
to: "org-1",
label: "member_of",
json: { source: "sync" },
})cargo add rociadb
client.file_service()
.upload("tenant-a", "contracts", "ctr-42.pdf")
.content_type("application/pdf")
.checksum(checksum)
.stream(reader)
.await?;Les points qui structurent aujourd’hui l’usage réel de la plateforme.
La stratégie retenue est de garder les stores séparés. Si un objet doit exister dans les deux modèles, le client crée le document et le nœud avec un ID partagé ou un lien explicite.
Non en v1. La cohérence entre les représentations est à la charge du client ou du workflow applicatif.
Pas encore. QueryDoc v1 couvre surtout `eq`, `in`, le tri stable et la pagination. Les opérateurs plus riches sont explicitement hors périmètre à ce stade.