Shema shrambe

kazalo

Colibrijeva koordinacijska shramba je ena sama podatkovna zbirka SQLite v

lasti storitve colibri. Hrani tablo opravil, register agentov in veščin ter

preslikavo najemnikov trezorja. Ni predpomnilnik — je trajno stanje. Večina

pisanj gre skozi API vtičnice demona, vendar shema pripada colibri-store.

crates/colibri-store/src/schema.rs

crates/colibri-store/src/lib.rs

Odločitve

SQLite, ne PostgreSQL, za shrambo krmilne ravnine

Shramba je SQLite, ker krmilna ravnina potrebuje enodatotečno podatkovno

zbirko, ki jo je enostavno varnostno kopirati, posneti, pregledati in

odpremiti. PostgreSQL s pgvector je načrtovan za iskanje/dolgoročni spomin,

vendar tabla opravil in register agentov ne potrebujeta strežniškega procesa.

Demon paketno združuje povezana pisanja in se zanaša na način WAL v SQLite za

sočasne bralce. To ohranja operaterski sklad samozadosten na majhnem

gostitelju brez diska.

WAL + tuji ključi privzeto

Store::open ob vsakem zagonu zažene tri pragme:

Te niso nastavljive med izvajanjem. Če bomo kdaj potrebovali drugačna jamstva

glede trajnosti ali sočasnosti, naj bo to eksplicitno, namesto da bi povezava

podedovala privzetke.

crates/colibri-store/src/lib.rs (Store::open)

Samo idempotentne migracije

Migracije tečejo ob vsakem Store::open. Uporabljajo tabele in indekse

IF NOT EXISTS, tako da so ponovni teki varni. Ne odpremljamo migracij

navzdol; razvoj sheme so aditivne tabele in stolpci. Če bo kdaj potrebna

destruktivna migracija, mora biti to nameren ročni korak, dokumentiran v

predaji.

crates/colibri-store/src/schema.rs

Štiri tabele za štiri skrbi

| Tabela | Skrb | Ključna entiteta |

| --------- | ------------------------------ | ---------------- |

| tasks | Tabla opravil | Task |

| agents | Registrirani sodelavci | Agent |

| skills | Katalog veščin ekipe | Skill |

| tenants | Preslikava najemnikov/trezorja | Tenant |

Opravila nosijo tuji ključ agent_id v agents. Vsako drugo razmerje je

ohlapno — veščine niso povezane z agenti, najemniki pa so referencirani po

svojem tenant_id v ukazih vtičnice in kljukah za oskrbo.

crates/colibri-store/src/schema.rs

Omejitev CHECK stanja opravila je vir resnice

tasks.status je omejen na ('queued','claimed','started','done','failed').

Enum TaskStatus v Rustu ga zrcali, vendar je podatkovna zbirka zadnje

preverjanje. Ukaz, ki poskusi vstaviti neznano stanje, pade ob času pisanja.

crates/colibri-store/src/schema.rs

Zmožnosti agenta shranjene kot JSON, ne normalizirane

agents.capabilities je JSON blob, na primer ["code","rust","freebsd"]. Izognili smo se ločeni tabeli zmožnosti, ker so

oznake zmožnosti samo nizi, register ekipe pa je majhen. Normalizirani stiki

bi dodali zapletenost sheme brez izboljšanja moči poizvedb.

Če metapodatki zmožnosti zrastejo (uteži, različice, zahtevane veščine),

lahko to kasneje razcepimo; trenutna shema namenoma ostaja pragmatična.

crates/colibri-store/src/lib.rs (register_agent)

Najemniki kodirajo preslikavo 1:1:1 ječa/trezor/zbirka

tenants hrani tenant_id, jail_root_path in collection_id kot UNIQUE

stolpce. Pravilo je tenant_id = ime ječe = zbirka Vaultwarden. To omogoča

colibri-vault, da poišče ječo po imenu in natančno ve, katero pot

gostitelja in zbirko Vaultwarden uporabiti pri pisanju datoteke okolja.

Stolpec status najemnika sledi življenjskemu ciklu:

provisioned → active → stopped → destroyed. Neodvisen je od tega, ali

proces ječe teče; upravljanje življenjskega cikla je ločena skrb.

crates/colibri-store/src/schema.rs (komentarji na tenants)

Privzeta pot podatkovne zbirke je specifična za platformo

Privzetek shrambe je:

$HOME/.local/share/colibri/colibri.sqlite, nato /tmp.

FreeBSD privzeto uporablja /var/db, ker je to običajni imenik za krajevno

stanje storitev. Linuxov padec spoštuje XDG, tako da je razvoj na delovni

postaji normalen.

crates/colibri-store/src/lib.rs (default_db_path)

Izvoz JSON za varnostne kopije in paritetne teste

Store::export_json() izvozi vse štiri tabele v en objekt JSON. Obstaja za

paritetne dife dvojnega teka, priložnostne varnostne kopije in razhroščevanje.

Ni primarni poizvedovalni API; večina bralcev naj uporablja tipizirane metode.

Razmerja entitet

tasks.agent_id ----------> agents.id

tasks agents skills tenants

----- ------ ------ -------

id id id tenant_id

agent_id FK name name jail_root_path

status capabilities description collection_id

title status category status

description created_at created_at created_at

created_at updated_at

updated_at

Glej tudi