Download Game! Currently 71 players and visitors. Last logged in:WhlxchGlauriCordobaDefault

Blitzer's Blog >> 71951

Back to blogs index
Posted: 03 Sep 2026 10:30 [ permalink ]
TC$mC$ on erinomainen ja erittC$in moderni visio. YhdistC$mC$llC$ in-memory
-suorituskyvyn, tC$ydellisen isomorfian (Node.js/Selain) ja tekoC$ly-natiivin
AST-MD (Abstract Syntax Tree - Markdown) -formaatin, saadaan aikaan
jC$rjestelmC$, joka on ihmiselle luettava, LLM:lle optimaalinen
(token-tehokas) ja koneelle salamannopea.
Suunnitellaan tC$mC$ konsepti vaihe vaiheelta UNIX-filosofiaa noudattaen: Tee
yksi asia ja tee se hyvin.
Kutsutaan tC$tC$ konseptia tyC6nimellC$ O-Base (Object Base).
1. Arkkitehtuurin Ydin: Isomorfinen RAM-First -malli
Jotta jC$rjestelmC$ voi toimia tC$ydellisesti sekC$ Chromessa (selaimessa)
ettC$ Node.js/Edge-ympC$ristC6issC$, ydinkoneisto ei saa tietC$C$ mitC$C$n
tiedostojC$rjestelmC$stC$ tai tietokannoista.
 * Core (Ydin): Puhdasta JavaScriptiC$/TypeScriptiC$. Data elC$C$
RAM-muistissa Map-tietorakenteissa (Map<CollectionName, Map<ObjectId,
Object>>).
 * Abstraktio (VC$ylC$): MC$C$ritellC$C$n yksinkertainen StorageAdapter-rajapin
ta, joka injektoidaan ytimeen.
 * Implementaatiot:
   * Node.js: Adapteri, joka kirjoittaa muutokset append-only JSONL-lokiin tai
flushaa ZFS-datasetille.
   * Chrome: Adapteri, joka synkronoi RAM-tilan asynkronisesti IndexedDB:hen
tai localStorageen.
2. Minimalistinen REST-rajapinta
Kaikki kommunikaatio tapahtuu selkeillC$ reiteillC$. Koska skeemat ovat
vapaita (schemaless), sama rajapinta palvelee CRM-asiakkaita, laskuja ja
myyjC$tilastoja.
 * GET /api/:collection  Listaa kokoelman data (tukee query-parametreja
hakuun).
 * GET /api/:collection/:id  Hae yksittC$inen objekti.
 * POST /api/:collection  Luo uusi objekti (palauttaa generoitu ID:n).
 * PUT /api/:collection/:id  Korvaa objekti kokonaan.
 * PATCH /api/:collection/:id  PC$ivitC$ objektin osia.
 * DELETE /api/:collection/:id  Poista objekti.
Replikointi ja Ingestion (Tuonti/Vienti):
 * POST /api/:collection/sync  Ottaa vastaan ja palauttaa dataa. Content-Type
mC$C$rittC$C$ formaatin:
   * application/jsonl (Koneille optimoitu, rivipohjainen)
   * text/markdown (AST-MD, TekoC$lyille ja ihmisille optimoitu)
3. AST-MD: TekoC$lyn ja Ihmisen VC$liliittymC$
TekoC$lymallit (LLM) ymmC$rtC$vC$t JSONia, mutta se vie paljon tokeneita ja on
altis syntaksivirheille generoinnissa. Markdown on LLM:n "C$idinkieli". AST-MD
on syntaksi, joka kuvaa JSON-puun (Abstract Syntax Tree) rakenteellisena
Markdownina.
Esimerkki CRM-datasta AST-MD -muodossa (GET /api/asiakkaat?format=ast-md):
# Collection: asiakkaat
> Metadata: {"schema": "free", "last_updated": "2026-09-03T10:00:00Z"}

## Object: crm_12345
- nimi: Yritys Oy
- status: aktiivinen
- yhteyshenkilo:
  - nimi: Matti MeikC$lC$inen
  - rooli: PC$C$ttC$jC$
- tagit: [ "vip", "ohjelmisto" ]

## Object: crm_12346
- nimi: Startup Inc
- status: liidi
- potentiaali_arvo: 50000

Kun tekoC$ly (tai ihminen) haluaa lisC$tC$ uuden tilauksen ja laskun, se voi
lC$hettC$C$ POST /api/tilaukset/sync -reittiin suoraan yllC$ olevan kaltaista
AST-MD -tekstiC$. JC$rjestelmC$n parseri kC$C$ntC$C$ Markdown-listat takaisin
sisC$kkC$isiksi JavaScript-objekteiksi.
4. Tallennuskerroksen Abstrahointi (Storage <-> RAM)
UNIX-hengessC$ storage-adapteri on vain putki. TC$ssC$ on sen minimaalinen
konsepti:
class OBase {
  constructor(adapter) {
    this.memory = new Map(); // Kokoelmat RAM:issa
    this.adapter = adapter;
  }

  async init() {
    // Ladataan kylmC$ data RAMiin adapterin kautta
    this.memory = await this.adapter.loadAll(); 
  }

  async set(collection, id, data) {
    if (!this.memory.has(collection)) this.memory.set(collection, new Map());
    this.memory.get(collection).set(id, data);
    
    // Asynkroninen tulostus taustalla (ei blokkaa RAM-vastausta)
    this.adapter.persist(collection, id, data); 
  }
}

/ Node.js kC$yttC6:
const db = new OBase(new FSJsonlAdapter('/var/data/crm'));
/ SelainkC$yttC6:
const db = new OBase(new IndexedDBAdapter('crm_local_sync'));

5. CRM-KC$yttC6tapaus & AI-Integraatio
TC$mC$n arkkitehtuurin vahvuus CRM-kC$ytC6ssC$ piilee sen joustavuudessa:
 * Vapaat skeemat: Kun myyjC$t keksivC$t uuden tavan luokitella liidejC$
(esim. kiinnostus_tekoalyyn: korkea), tietokantaa ei tarvitse pC$ivittC$C$
(migraatiot jC$C$vC$t historiaan). KenttC$ vain ilmestyy uusiin objekteihin.
 * AI/Bot -kC$yttC6: LLM:lle annetaan ohje: "Hae asiakkaat lC$hettC$mC$llC$
GET /api/asiakkaat. Jos haluat lisC$tC$ laskun, lC$hetC$ POST /api/laskut
muodossa AST-MD."
   * TekoC$lyn ei tarvitse rakentaa monimutkaisia SQL-kyselyitC$.
   * TekoC$ly osaa luonnostaan lukea ja kirjoittaa AST-MD:tC$ tC$ydellisesti.
 * Tapahtumavirta (Event Sourcing): Koska jC$rjestelmC$ tukee
sisC$C$nrakennetusti JSONL-formaattia, kaikki muutokset (tilaukset,
laskumuistutukset) voidaan halutessa kirjoittaa append-only logiin, josta
voidaan aina rakentaa jC$rjestelmC$n tila uudelleen (re-hydration).
Yhteenveto Skaalautuvuudesta
 * Pystysuuntainen skaalautuvuus (Scale-Up): Nykyaikaiset palvelimet voivat
pitC$C$ kymmeniC$ gigatavuja JSON-objekteja RAM-muistissa (satoja miljoonia
CRM-rivejC$). Haku RAMista V8-moottorilla on nanosekuntiluokkaa.
 * Vaakasuuntainen skaalautuvuus (Scale-Out): JSONL ja AST-MD replikaatio
mahdollistavat helpon master-slave tai vertaisverkkopohjaisen (P2P)
synkronoinnin instanssien vC$lillC$.