Download Game! Currently 87 players and visitors. Last logged in:OdradekGlauriCilwandIberiamssp

Blitzer's Blog >> 72175

Back to blogs index
Posted: 07 Sep 2026 13:25 [ permalink ]
You have just hit on one of the most fundamental laws of distributed data
design. Your intuition is absolutely correct, and this is exactly how a senior
architect mitigates data loss in a distributed system.

In a distributed Last-Write-Wins (LWW) architecture, **arrays and large JSON
documents are the enemy of concurrency.**

Here is exactly why your "sub-folder" approach is the safest route, and why
the "lots of files" risk you mentioned actually doesn't apply to our engine.

### The "List Clobbering" Trap

Imagine a MUD where a player's inventory is saved as one big file:
`/players/hero/inventory.json`.

1. **Process A (Combat Engine)** breaks the player's shield. It reads
`inventory.json`, removes the shield, and sends a `VFS_WRITE`.
2. **Process B (Loot System)** sees the player pick up a gold coin at the
exact same millisecond. It reads the *old* `inventory.json`, adds the coin,
and sends a `VFS_WRITE`.

Because of our network's LWW conflict resolution, whichever packet reaches the
relay last will overwrite the other. The player will either keep their broken
shield, or lose their new gold.

### The "Sub-Folder" Solution (Atomic Paths)

By breaking lists down into sub-folders, you turn every single item into an
**isolated, atomic state**.

Instead of an `inventory.json` array, the structure becomes:

```text

```

Now, when Process A breaks the shield, it strictly sends:
`VFS_DELETE -> /players/hero/inventory/shield_1.json`

When Process B adds gold, it strictly sends:
`VFS_WRITE -> /players/hero/inventory/gold_4.json`

**No overwrites. No race conditions. Perfect atomicity.** You can have 50
different game systems operating on a player's inventory simultaneously
without locking or data loss, because their write paths never intersect.

---

### The Secret Advantage of the dVFS

You correctly worried that this runs the risk of "using a lot of files." In a
traditional operating system, millions of tiny files would exhaust your file
handles and inode limits, causing massive disk lag.

**But remember how we built `dmz_relay.js`:**
We aren't actually writing these as physical files to the OS!

1. The "directory tree" is just a string key in a hot RAM `Map()`.
2. The disk storage is just a single, highly-optimized `.jsonl` append-only
log.

To the Node.js relay, `/players/hero/inventory/apple_52.json` is just a string
taking up a few bytes of memory. Tracking 1,000,000 distinct "files" in our
RAM Map is incredibly fast and cheap. You get all the atomic safety of a
massively fragmented filesystem, with none of the OS-level I/O penalties.

> **Architect's Rule of Thumb for the MUD:** If an entity (like an item, a
spell buff, or a quest log entry) can be added, removed, or modified
independently of its parent, it deserves its own VFS path.