store/index/README.md
SQLite-backed index for the pnpm content-addressable store
Previously, pnpm stored package metadata as individual JSON files under
$STORE/index/. Each resolved package had its own file, keyed by its integrity
hash. This worked but had several downsides at scale:
Filesystem overhead. Every lookup required open / read / close
syscalls, and every write needed an atomic write + rename per entry.
On repositories with thousands of dependencies the accumulated I/O was
significant.
Space inefficiency. Small metadata entries still consumed a minimum
filesystem block each (typically 4 KiB), wasting space.
Storing all entries in a single SQLite database ($STORE/index.db) addresses
these issues:
Fewer syscalls. Reads and writes go through SQLite's page cache and memory-mapped I/O instead of individual file operations.
Space efficiency. Small entries share database pages instead of each occupying a full filesystem block.
Batch writes. Multiple entries can be inserted in a single transaction, reducing disk flushes.
MIT