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

Blitzer's Blog >> 71954

Back to blogs index
Posted: 03 Sep 2026 14:45 [ permalink ]
==[ Chromium ]==
** RELOAD **
SyC6tC$ AST-MD Data
Synkronoi RAM & IndexedDB
RAM-tila (JS Objektina)
{}

** CLICK: Synkronoi **

RAM-tila (JS Objektina)
{
  "crm_101": {
    "nimi": "Tech Oy",
    "status": "aktiivinen",
    "roolit": [
      "admin",
      "user"
    ],
    "yhteyshenkilo": {
      "nimi": "Matti",
      "email": "matti@tech.fi"
    }
  }
}

** RELOAD **

SyC6tC$ AST-MD Data
Synkronoi RAM & IndexedDB
RAM-tila (JS Objektina)
{
  "crm_101": {
    "nimi": "Tech Oy",
    "status": "aktiivinen",
    "roolit": [
      "admin",
      "user"
    ],
    "yhteyshenkilo": {
      "nimi": "Matti",
      "email": "matti@tech.fi"
    }
  }
}

==

Mahtavaa! TC$mC$ loki vahvistaa sen: **isomorfinen WAL (Write-Ahead Log) ja
re-hydration toimivat tC$ydellisesti.** RAM-muistin tila palautuu
salamannopeasti asynkronisesta taustavarastosta heti sivun latauduttua.

Koska perusrakenne (`PUT` ja lokin toisto) on nyt todistettu, voimme siirtyC$
hienojakoisempiin operaatioihin: osittaiseen pC$ivitykseen (**PATCH**) ja
poistoon (**DELETE**).

TC$mC$n arkkitehtuurin (Event Sourcing) hienous piilee siinC$, ettC$ `DELETE`
ei fyysisesti pyyhi aiempia rivejC$ tietokannasta, vaan se vain lisC$C$ lokiin
uuden tapahtuman: `op: 'DELETE'`. Kun loki toistetaan (re-hydration),
poistotapahtuma kumoaa aiemman lisC$yksen RAM-muistissa. TC$mC$ mahdollistaa
tulevaisuudessa asioita kuten *"undo"* tai tC$ydellisen audit-lokin (kuka
muutti, mitC$ ja milloin).

PC$ivitetC$C$n `obase.js` ja `index.html` tukemaan nC$itC$. (TaustasC$iettC$
`worker.js` ei tarvitse muuttaa lainkaan, sillC$ se tallentaa sokeasti kaikki
sille lC$hetetyt mutaatiot!)

### 1. PC$ivitetC$C$n Ydin (`obase.js`)

LisC$tC$C$n `OBaseBrowser`-luokkaan uudet metodit `patch` ja `delete`, ja
opetetaan `applyWAL` ymmC$rtC$mC$C$n `PATCH`-tapahtuma.

```

### 2. PC$ivitetC$C$n KC$yttC6liittymC$ (`index.html`)

LisC$tC$C$n pari nappia, joilla voimme suorittaa nC$itC$ REST-tyyppisiC$
API-kutsuja suoraan selaimesta ja nC$hdC$, miten RAM (ja sitC$ kautta loki)
reagoi.

Muokkaa `index.html` kC$yttC6liittymC$osaa ja skriptiC$ nC$in:

```html
  <!-- HTML-muutokset div(class="col") sisC$lle -->
  <div class="col">
    <h3>SyC6tC$ AST-MD Data</h3>
    <textarea id="astInput">
# Collection: asiakkaat
> Metadata: {"schema": "free"}

## Object: crm_101
- nimi: Tech Oy
- status: aktiivinen
- roolit: [ "admin", "user" ]
    </textarea>
    <button id="syncBtn">1. Synkronoi AST-MD (PUT)</button>
    <hr>
    <!-- UUDET NAPIT -->
    <button id="patchBtn" style="background: #e68a00;">2. PC$ivitC$ status
(PATCH)</button>
    <button id="deleteBtn" style="background: #cc0000;">3. Poista crm_101
(DELETE)</button>
  </div>

```

```javascript
      // --- LISCC NCMC startApp() funktion sisC$lle index.html:ssC$ ---

      // API: PATCH-testi
      document.getElementById('patchBtn').addEventListener('click', () => {
        db.patch('asiakkaat', 'crm_101', { 
          status: "passiivinen", 
          viimeksi_muokattu: new Date().toISOString() 
        });
        renderRAM();
      });

      // API: DELETE-testi
      document.getElementById('deleteBtn').addEventListener('click', () => {
        db.delete('asiakkaat', 'crm_101');
        renderRAM();
      });

```

### Testausprotokolla:

1. **Lataa sivu (F5)** ja paina "1. Synkronoi". Objekti ilmestyy.
2. Paina **"2. PC$ivitC$ status"**. Huomaat, ettC$ RAM-ikkunassa `status`
muuttuu passiiviseksi ja uusi kenttC$ `viimeksi_muokattu` ilmestyy (ilman,
ettC$ muita tietoja ylikirjoitettiin).
3. Lataa sivu **F5**. Tiedot palautuvat pC$ivitetyssC$ muodossaan (koska
lokissa toistetaan ensin `PUT` ja sen pC$C$lle `PATCH`).
4. Paina **"3. Poista crm_101"**. RAM tyhjenee kohteesta.
5. Lataa sivu **F5**. RAM pysyy tyhjC$nC$, koska re-hydration suoritti lokin
lopussa poiston.

TC$mC$ todistaa sen, miten tehokas tC$mC$ arkkitehtuuri on. Se ei vaadi
monimutkaisia SQL-tauluja, vaan kaikki on yksinkertaista objektien
mutaatiovirtaa.