==[ DevChat-1 ]== BRakenne ja muutosten periaateC Core:n SAB ja vCB$ylien SAB on erotettu toisistaan. Aiemmin app.js loi yhden ison SAB:n, mutta core loi silti oman erillisen SAB:n (bugi). Nyt core kCB$yttCB$CB$ sille annettua SAB:ta, ja vCB$ylCB$t kCB$yttCB$vCB$t erillistCB$ SAB:ta. TCB$mCB$ yksinkertaistaa snapshotin: tallennetaan vain core:n SAB, ei viestintCB$puskureita. Snapshot on binCB$CB$ridumppi koko core:n SAB:sta. takeSnapshot() lukee this.core.getSharedArrayBuffer() ja kirjoittaa sen suoraan snapshot.bin-tiedostoon. Ei JSON-serialisointia eikCB$ erillistCB$ muuntamista C" raaka muisti kopioidaan levylle. TCB$mCB$ on nopeaa ja vastaa DESIGN.md:n ZERO_COPY_SNAPSHOTS-ajatusta. Fast Recovery lataa snapshotin ennen core:n alustusta. init() tarkistaa ensin snapshot.bin:n. Jos se lCB6ytyy, se luetaan Buffer-muotoon ja kopioidaan uuteen SharedArrayBuffer-objektiin. TCB$mCB$ SAB annetaan OmegaCore-konstruktorille loadFromSnapshot: true -lipun kanssa. TCB$llCB6in core ei nollaa header-tietoja, hash-taulua tai log-offsetia, vaan jatkaa siitCB$ tilasta, joka snapshotissa oli. Snapshot-ajastin kCB$ynnistetCB$CB$n automaattisesti. startSnapshotTimer(10000) kCB$ynnistCB$CB$ setInterval-funktion, joka kutsuu takeSnapshot() 10 sekunnin vCB$lein. Voit sCB$CB$tCB$CB$ SNAPSHOT_INTERVAL_MS-v akiota app.js:n alussa. 2. KCB$yttCB6CB6notto Korvaa core.js ja app.js yllCB$ olevilla pCB$ivitetyillCB$ versioilla. Varmista, ettCB$ ring-buffer.js ja worker.js ovat ennallaan (ei tarvitse muuttaa). KCB$ynnistCB$ sovellus normaalisti: node app.js. EnsimmCB$isellCB$ kCB$ynnistyksellCB$ snapshot.bin ei ole olemassa C" luodaan tyhjCB$ SAB. Sovellus alkaa ottaa snapshotin 10 sekunnin vCB$lein. Kun pysCB$ytCB$t sovelluksen (Ctrl+C), shutdown() ottaa vielCB$ viimeisen snapshotin ennen sammumista. KCB$ynnistCB$ sovellus uudelleen: init() havaitsee snapshot.bin:n, lataa sen ja core jatkaa siitCB$ tilasta, johon jCB$CB$tiin. Kaikki aiemmin tallennetut oliot (UID:t, data) ovat edelleen kCB$ytettCB$vissCB $. 3. Huomioita Snapshotin eheys: Koska core on lock-free, snapshot voi teoriassa jCB$CB$dCB$ hieman epCB$johdonmukaiseksi, jos kirjoitus tapahtuu samaan aikaan. TCB$mCB$ on hyvCB$ksytty suunnitteluperiaate (ZERO_COPY_SNAPSHOTS). KCB$ytCB$nnCB6ssCB$ riski on pieni, ja seuraava snapshot korjaa tilan. Levytila: Tallennetaan koko core:n SAB (oletuksena 64 Mt). Voit pienentCB$CB$ bufferSize-parametria OmegaServer-konstruktorissa, jos haluat pienemmCB$n snapshotin. Atominen kirjoitus: takeSnapshot() kirjoittaa ensin .tmp-tiedostoon ja sitten rename-komennolla korvaa varsinaisen tiedoston. TCB$mCB$ estCB$CB$ rikkinCB$isen snapshotin syntymisen, jos sovellus kaatuu kesken kirjoituksen. Suorituskyky: Snapshotin ottaminen kopioi koko SAB:n muistissa (Buffer.from(sab)) ja kirjoittaa sen levylle. TCB$mCB$ vie hetken (riippuen levyn nopeudesta), mutta se tapahtuu taustalla eikCB$ estCB$ muita operaatioita. Voit tarvittaessa siirtCB$CB$ snapshotin toiseen sCB$ikeeseen, mutta tCB$mCB$ on riittCB$vCB$ MVP:lle. 4. Mahdolliset jatkokehitykset Osittainen snapshot: Tallentaa vain logOffset-arvoon asti ulottuvan osan, jolloin tiedostokoko pienenee. Vaatisi metadatan tallentamista (esim. SAB-koko, logOffset) recoveryCB$ varten. Inkrementaalinen varmuuskopiointi: HyCB6dyntCB$CB$ APPEND_ONLY_LOG-rakennetta ja tallentaa vain uudet muutokset snapshotien vCB$lillCB$. Kompression kCB$yttCB6: Pakkaa snapshot ennen levylle kirjoitusta tilan sCB$CB$stCB$miseksi. NCB$mCB$ muutokset toteuttavat pyydetyt ominaisuudet ja noudattavat DESIGN.md:n arkkitehtuuria. ==[ /DevChat-1 ]== user@elli:/opt/lockfree-ram-db$ ls -ltra total 116 -rw-r--r-- 1 user userB 4903 Aug 31 15:43 ring-buffer.jsC -rw-r--r-- 1 user userB 2979 Aug 31 15:51 worker.jsC -rw-r--r-- 1 user userB 1512 Aug 31 15:52 test.jsC -rwxr-xr-x 1 user userB B176 Aug 31 15:53 install.shCC -rw-r--r-- 1 user user 16902 Aug 31 15:59 test-suite.js -rw-r--r-- 1 user userB B426 Aug 31 16:00 package.jsonCC -rwxr-xr-x 1 user userB B554 Aug 31 16:00 run-tests.shCC -rw-r--r-- 1 user userB 2113 Aug 31 16:11 debug.jsC -rw-r--r-- 1 user userB 2279 Aug 31 16:19 debug-offset.jsB B B B -rw-r--r-- 1 user userB 1589 Aug 31 16:23 test-report.jsonB B B Bdrwxr-xr-x 2 user userB 4096 Aug 31 16:23 .CCCCCCCCCCC -rw-r--r-- 1 user userB 2742 Aug 31 16:23 test.logB B B B B B B B-rw-r--r-- 1 user user 18361 Aug 31 19:02 DESIGN.mdB B B B B B B drwxrwxrwx 6 root rootB 4096 SepB 1 02:48 ..CCCCCCCCCCCCCCCCCC -rw-r--r-- 1 user user 13671 SepB 1 02:49 core.jsC -rw-r--r-- 1 user userB 7771 SepB 1 02:49 app.jsCC user@elli:/opt/lockfree-ram-db$