Download Game! Currently 55 players and visitors. Last logged in:UglinessArasakaMahjongZenick

Blitzer's Blog >> 71798

Back to blogs index
Posted: 21 Aug 2026 12:18 [ permalink ]
Olemme edenneet tyhjC$stC$ suunnittelupC6ydC$stC$ tC$ysin toimivaan,
huippunopean tietokantamoottorin MVP-versioon (Minimum Viable Product).
Rakenne on koodattu C:llC$, optimoitu ZFS:lle ja testattu eristetyssC$
ympC$ristC6ssC$.

TC$ssC$ on tiivistetty katsaus siihen, mitC$ olemme saaneet aikaan ja miten
jC$rjestelmC$ tC$llC$ hetkellC$ toimii:

### 1. Infran ja KehitysympC$ristC6n Pystytys

* **Eristetty hiekkalaatikko:** Loimme puhtaan Debian 12 (Bookworm)
LXC-kontin, jolle asetettiin cgroups v2 -resurssirajoitteet (8 GB RAM, 4
CPU-ydintC$). TC$mC$ takaa isC$ntC$palvelimen ehdottoman vakauden mahdollisten
C-kielen muistivirheiden varalta.
* **ZFS I/O-optimointi:** Rakensimme isC$ntC$palvelimelle dedikoidun
ZFS-datasetin (`tank/db-storage-mvp`), jonka `recordsize` asetettiin tasan 1
megatavuun ja pakkaus lz4:C$C$n.
* **Bind-mount:** Jaoimme tC$mC$n ZFS-datasetin suoraan kontin sisC$lle
(`/mnt/zfs-db/`), mikC$ mahdollistaa bare-metal -tason I/O-nopeuden kontin
sisC$ltC$ ilman virtualisoinnin pullonkauloja.

### 2. Datan BinC$C$rirakenne ja Storage Engine (C-Ydin)

* **Columnar-rakenteen mC$C$rittely:** Koodasimme `zfs_db_format.h`
-tiedostoon tavutarkan, pakatun (`__attribute__((packed))`) C-struct
-mC$C$rittelyn `CHUNK_DATA` ja `CHUNK_SHADOW` -rakenteille.


* **Tiedostojen generointi:** Teimme `mock_writer.c` -ohjelman, joka
kirjoittaa sarakepohjaista dataa ja rinnakkaista metatietoa suoraan ZFS:lle
asettaen dataoffsetit O(1) -hakunopeutta varten.
* **Zero-Copy Lukumoottori:** Loimme `reader_core.c` -moottorin (`MMAP_IO`),
joka `mmap()`-kutsua kC$yttC$en mapaa ZFS-tiedostot suoraan C-ohjelman
virtuaalimuistiin. TC$mC$ poistaa tC$ysin datan kopioinnin RAM-muistissa.
Ohjelma hakee arvot suorilla osoittimilla (pointers) ja kC$yttC$C$ O(1)
Dispatch Table -ratkaisua anomaliarutiinien laukaisuun datassa olevien
metatagien perusteella (`DISPATCH_TABLE`).



### 3. Skaalautuva Kirjoitusputki (Write Pipeline)

* **Lock-Free Puskuri:** Toteutimme `write_buffer.c` -ohjelmassa asynkronisen
kirjoituspuskurin (`ACTIVE_CHUNK`). Se hyC6dyntC$C$ C11-standardin atomisia
prosessorikC$skyjC$ (`atomic_fetch_add`), jolloin useat verkkosC$ikeet voivat
puskea dataa muistiin samanaikaisesti ilman hitaita Mutex-lukkoja (Lock-Free).
Testasimme tC$tC$ onnistuneesti 10 000 rivin monisC$ikeisellC$ sisC$C$najolla.


* **Asynkroninen JC$C$dytys (Flush):** Laajensimme kirjoituslogiikkaa
`async_flush.c` -ohjelmalla (`ASYNC_FLUSH`). Heti kun keskusmuistin Lock-Free
-puskuri tC$yttyy, ohjelma kaappaa sen sisC$llC6n ja dumppaa sen ZFS:lle
yhtenC$ sekventiaalisena datablokkina Base62-nimellC$ (`FS_INDEXING`).



### 4. TCP-Verkkorajapinta ja Protokolla (Proxy-liitC$ntC$)

* **Minimaalinen BinC$C$ripalvelin:** Rakensimme `tcp_server.c` -tiedostoon
lokaalin, nollariippuvuuden TCP-palvelimen (`TCP_SERVER`), joka kuuntelee
porttia 6666. Se jC$ttC$C$ HTTP-protokollan raskauden taakseen ja lukee
suoraan 8 tavun mittaisia binC$C$rikehyksiC$.


* **Eksplisiittinen VirheenkC$sittely:** Palvelin lukee mapatusta
tietokannasta arvoja ja palauttaa 16 tavun vastauksen mikrosekunneissa.
Testasimme onnistuneesti `test_client.py` -skriptillC$, ettC$ jC$rjestelmC$
kC$sittelee yli rajojen menevC$t haut kiltisti palauttamalla statuskoodin 404,
eikC$ salli segment faultteja tai alustamattoman muistin lukemista.

---

Olemme siis rakentaneet arkkitehtuuridokumentin mukaisen ytimen alimman
kerroksen ja todistaneet teknologiavalinnat (C, ZFS, mmap, Lock-Free Atomics)
sataprosenttisen toimiviksi omassa hiekkalaatikossaan.

Kun olet valmis jatkamaan, meillC$ on kaksi loistavaa reittiC$: joko
viritC$mme tC$mC$n lukumoottorin absoluuttiseen C$C$rimmilleen SIMD/AVX2
-vektoroinnilla, tai aloitamme teksti/binC$C$ri-datan hallinnan suunnittelun
`CAS_BLOB_STORE`-arkkitehtuurilla.