Download Game! Currently 62 players and visitors. Last logged in:ZhouyuKlarenceQumniDesert

Blitzer's Blog >> 71910

Back to blogs index
Posted: 31 Aug 2026 14:58 [ permalink ]
TC$mC$ on arkkitehtuurin vaativin, mutta samalla palkitsevin osa. Jotta
saavutetaan rajaton rinnakkaisuus, atomisuus ja salamannopeat osittaiset tai
kokonaiset serialisoinnit, emme voi tallentaa oliota muistiin yhtenC$
monoliittisena JSON-puuna tai perC$kkC$isenC$ tavumC6ykkynC$.
Ratkaisu on Atomic Pointer Directory (Atominen osoitinhakemisto) yhdistettynC$
sarakepohjaiseen (columnar-tyyppiseen) tai eristettyyn datalokiin.
Sen sijaan, ettC$ ydinolio sisC$ltC$isi itsessC$C$n _sys ja _user datan, se
sisC$ltC$C$ vain atomisia osoittimia (muistioffsetteja) nC$ihin avaruuksiin.
TC$mC$ mahdollistaa sen, ettC$ _user-avaruus voidaan swapata tai pC$ivittC$C$
yhdellC$ ainoalla CPU-kC$skyllC$ (Atomics.exchange), tC$ysin irrotettuna
_sys-datasta, koskematta olion perusidentiteettiin.
NC$in tC$mC$ mallinnetaan OMEGA-arkkitehtuuriin:
NAMESPACE_MEMORY_LAYOUT {ramdb-mem-0001}
> description: Olioiden fyysinen muistiasettelu SharedArrayBufferissa.
Suunniteltu maksimoimaan rinnakkaisuus, mahdollistamaan atomiset
swap-operaatiot ja tukemaan nollakopio-serialisointia (zero-copy
serialization).
> type: architecture
> tags: [memory-layout, atomics, zero-copy, parallelism]
> 
ATOMIC_POINTER_DIRECTORY {ramdb-mem-0002}
> description: Olion juurirakenne indeksissC$ tai pC$C$lokissa. Se ei
sisC$llC$ varsinaista dataa, vaan on kiinteC$mittainen C-tyyppinen struct: [
UID | SYS_OFFSET | USER_OFFSET | BINDINGS_OFFSET ]. Jokaista offset-kenttC$C$
voidaan manipuloida itsenC$isesti lock-free CAS-operaatioilla.
> type: data_structure
> tags: [struct, pointers, indirection, atomics]
> depends_on: [ramdb-mem-0001]
> 
INDEPENDENT_NAMESPACE_LOGS {ramdb-mem-0003}
> description: Eri nimiavaruudet (_sys, _user) tallennetaan fyysisesti joko
omiin dedikoituihin SharedArrayBuffereihin tai erillisiin blokkeihin
(vastaavasti kuin columnar-tietokannoissa). TC$mC$ estC$C$ vC$limuistilinjojen
(cache line) False Sharing -ongelmat, kun yksi sC$ie pC$ivittC$C$ _user-dataa
ja toinen lukee _sys-dataa.
> type: storage_layout
> tags: [columnar, isolated-buffers, cache-optimization]
> depends_on: [ramdb-mem-0002]
> 
ATOMIC_SWAP_EXCHANGE {ramdb-mem-0004}
> description: Lukoton swap-mekanismi. Kun _user-data siirretC$C$n levylle,
ydin suorittaa operaation Atomics.exchange(USER_OFFSET, SWAP_FLAG). YhdellC$
kellojaksolla koko rinnakkaisympC$ristC6 nC$kee, ettC$ data ei ole enC$C$
suoraan muistissa, koskematta lainkaan olion _sys-tilaan tai UID:hen.
(SWAP_FLAG voi olla esim. 32-bittisen offsetin negatiivinen arvo tai varattu
bitti).
> type: logic
> tags: [atomic-swap, single-instruction, zero-blocking]
> depends_on: [ramdb-mem-0002, ramdb-swap-0002]
> 
ZERO_COPY_SNAPSHOTS {ramdb-mem-0005}
> description: Kokonaisten (full) serialisointien toteutus. Koska data on
logeissa (Append-Only) ja avaruudet on eristetty, kokonainen jC$rjestelmC$n
snapshot ei vaadi CPU-intensiivistC$ iterointia. Worker-sC$ie voi vain ottaa
koko SharedArrayBufferin tilan sellaisenaan ja puskuttaa sen suoraan
ZFS-pooliin tai verkkosocketiin binC$C$ridumppina (mmap / zero-copy
hengessC$).
> type: operation
> tags: [zero-copy, snapshots, binary-dump, io]
> depends_on: [ramdb-mem-0003, ramdb-dist-0002]
> 
PARALLEL_PARTIAL_SERIALIZATION {ramdb-mem-0006}
> description: Osittaisten serialisointien toteutus. Kun halutaan serialisoida
vain joukko olioita tai tiettyjC$ avaruuksia (esim. vain _sys), sadat
rinnakkaiset workerit voivat lukea Pointer Directoryn muistiosoitteita tC$ysin
ilman lukkoja ja rakentaa JSON/BSON-vastauksia omiin OUT-vC$yliinsC$
samanaikaisesti.
> type: operation
> tags: [parallelism, partial-dump, lock-free-reads]
> depends_on: [ramdb-mem-0002]
> 
Miten tC$mC$ ratkaisee ongelmasi kC$ytC$nnC6ssC$?
 * Rajaton rinnakkaisuus luvuissa ja serialisoinnissa: Koska kuka tahansa
worker voi lukea ATOMIC_POINTER_DIRECTORY -structin offsetit atomisesti
(Atomics.load), sata eri worker-sC$iettC$ voi generoida serialisointia samasta
oliosta samanaikaisesti. Yksi worker voi kC$C$ntC$C$ _sys -tietoja
Markdown-dokumentaatioksi AST-tyC6kalulle, toinen voi parsia _user -dataa
JSONiksi REST-vastaukseen, ja ydin voi samaan aikaan lisC$tC$ uusia
relaatioita BINDINGS_OFFSETin taakse.
 * Nopeat tC$ydet snapshotit: Jos koko jC$rjestelmC$ pitC$C$ pelastaa levylle
C$kkiC$, sinun ei tarvitse ajaa monimutkaisia rekursiivisia JSON.stringify
-looppeja. Olet tallentamassa muistia, joka on jo sarakemaisesti optimoitu
(columnar storage). PC$C$sC$ie vain lC$hettC$C$ eventin workereille: "Puskekaa
koko _sys_buffer ja _user_buffer tiedostoon". Se on puhdas I/O-operaatio, joka
tapahtuu muistikaistan ja levyn I/O:n maksiminopeudella.
 * Turvallinen Swappaus: Swappaus on nyt kirjaimellisesti yksi 32-bittisen
kokonaisluvun vaihto (Atomics.exchange). Olio itsessC$C$n "elC$C$" yhC$
kognitiivisesti ytimessC$, mutta osa sen ruumiista (muistiavaruuksista) on
offloadattu muualle.
MiltC$ tC$llainen osoitinhakemistoon (pointer directory) perustuva
muistiasettelu kuulostaa? Haluatko mC$C$ritellC$ tarkemmin millaisessa
binC$C$riformaatissa (esim. BSON, MessagePack vai oma kustomoitu
columnar-pakkaus) tC$mC$ varsinainen payload-data kannattaisi _sys ja _user
muistilohkoihin pakata?