noex ecosystem

noex-store

Reaktivní store se schématem

In-memory store s automatickou validací schématu, reaktivními dotazy ve stylu Convex, ACID transakcemi a pluggable perzistencí. Postavený na noex GenServer primitivech pro odolnou správu dat.

Klíčové vlastnosti

Vše potřebné pro reaktivní správu dat v Node.js

Schéma a validace

Definujte typovaná schémata bucketů s omezením, automaticky generovanými poli, unikátními indexy a formátovými validátory. Záznamy se validují automaticky při každém zápisu.

Reaktivní dotazy

Sledování závislostí ve stylu Convex automaticky přepočítává dotazy při změně podkladových dat. Granularita na úrovni záznamu i bucketu s deep-equality porovnáním.

ACID transakce

Atomické zápisy přes více bucketů s optimistickým zamykáním. Čtení vlastních zápisů v rámci transakce, automatický rollback při konfliktu a události publikovány až po commitu.

Pluggable perzistence

Přepínejte mezi File, SQLite nebo Memory adaptéry. Debounced batching udržuje zápisy efektivní. Opt-out per bucket pro efemérní data.

TTL a limity velikosti

Per-record TTL s čitelným formátem doby trvání a automatickým mazáním. Evikce při překročení maximální velikosti bucketu odstraní nejstarší záznamy.

Event systém

Wildcard pub/sub na mutacích bucketů. Odebírejte konkrétní buckety, typy událostí nebo všechny změny jedním patternem. Pod kapotou pohání reaktivní dotazy i perzistenci.

Supervision architektura

Jeden GenServer na bucket, supervisovaný strategií one-for-one. Pokud bucket spadne, ostatní běží dál.

Store
Supervisor (one_for_one)
BucketServer × N
QueryManager
EventBus
TtlManager
Persistence

Každý bucket běží ve vlastním GenServeru — plná izolace procesů, sekvenční zpracování zpráv, žádné race conditions.

QueryManager odebírá EventBus pro notifikace o změnách. Persistence debouncuje zápisy přes EventBus. Veškerá koordinace je event-driven.

Podívejte se v akci

Reálné ukázky kódu: definice schématu, reaktivní dotazy a transakce

schema.ts
import { Store } from '@hamicek/noex-store';

const store = await Store.start();

await store.defineBucket('users', {
  key: 'id',
  schema: {
    id:    { type: 'string', generated: 'uuid' },
    name:  { type: 'string', required: true },
    email: { type: 'string', format: 'email', unique: true },
    role:  { type: 'string', enum: ['admin', 'user'], default: 'user' },
  },
});

const users = store.bucket('users');

// Insert — validated against schema, id auto-generated
const alice = await users.insert({
  name: 'Alice',
  email: '[email protected]',
});

// Read
const user = await users.get(alice.id);

// Update
await users.update(alice.id, { role: 'admin' });

// Query
const admins = await users.where({ role: 'admin' });

Srovnání

noex-store vs populární reaktivní stores a klientské databáze

Featurenoex-storeRxDBTinyBaseSignalDBLokiJSDexie.jsWatermelonDB
Reaktivní dotazyConvex-styleRxJS ObservablesQuery engineSignal-basedDynamicViewsliveQueryobserve()
Validace schématuVestavěné DSLJSON SchemaSchematizersValidate eventColumn types
Multi-kolekční transakceOptimistické zamykáníSingle-storeSingle-coll.ACIDWriter blocks
PerzistenceAdapter-basedSwappable storageAdaptersAdaptersAdaptersIndexedDBSQLite
TTL / Auto-expiraceFirst-classCleanup onlyBuggy
Event bus s wildcardsTopic pub/subRxJS streamsGranular listenersCollection eventsCollection eventsHooksObservables
In-memory first
Supervision stromOTP one_for_one
Sekundární indexyUnique + non-uniqueJSON SchemaIndexes APIQuery selectorsUnique + binaryCore featureisIndexed
Velikost (gzip)~5 kB60–150+ kB3.5–8 kB~5–8 kB~20 kB~26 kB~2 MB
StavAktivníAktivní (freemium)AktivníAktivníArchivovanýAktivníAktivní

Čím je noex-store unikátní

Supervision strom

Každý bucket je izolovaný GenServer aktor. Pokud jeden spadne, supervisor ho restartuje, zatímco ostatní pokračují bez přerušení.

First-class TTL

Deklarativní expirace per bucket s automatickým mazáním na pozadí a _expiresAt metadaty.

Reaktivní dotazy ve stylu Convex

Běžné async funkce se stávají živými subskripcemi s automatickým sledováním závislostí na úrovni bucketu i záznamu.

Multi-bucket ACID transakce

Optimistické zamykání na základě verzí s atomickým commitem a best-effort rollbackem napříč kolekcemi.

Wildcard Event Bus

Odebírejte patterny jako bucket.*.deleted nebo bucket.users.* napříč celým storem.

Začněte budovat reaktivní datové vrstvy

Přidejte noex-store do svého projektu během vteřin

npm install @hamicek/noex-store
$ npm install @hamicek/noex-store

Podpořte projekt

Líbí se vám noex? Pomozte nám pokračovat ve vývoji

Bitcoin
Bitcoin QR Code