Skip to content

Memory per vector

Measured by scripts/measure_memory.py on 5,000 random 384-dimensional float32 vectors (Windows, Python 3.13.14, NumPy 2.3.4). Regenerate the page with the script; the numbers are not typed by hand.

On disk, per vector

Store Bytes per vector
ANN index (usearch, float32) 1,684
SQLite (ids, text, metadata, timestamps) 2,234
Total 3,918

The raw vector is 1,536 bytes. What the index adds is the graph: neighbour lists for every node.

The SQLite figure is mostly a second copy of the vector, in the local document store (the documents table in the collection-level .db), beside the ids, text, metadata and timestamps. That column used to hold the vector as JSON, at about 5.7 times what float32 costs; it is a float32 blob now, which is where most of the drop from the figure this page used to carry has come from.

So budget about 2.6x the raw vector size on disk for a local collection: 3,918 bytes against the 1,536 the vector itself is.

Quantisers, per vector

The collection index stores float32 today. The quantisers ship as standalone classes (vectrixdb.core.quantization) for callers who store or transmit vectors themselves; this is what each costs after fit() and encode().

Quantiser Bytes per vector Compression
float32 (none) 1,536 1.0x
scalar 8-bit 384 4.0x
binary 1-bit 48 32.0x
product (8 subvectors, 256 clusters) 8 192.0x

Recall under each quantiser is measured separately in tests/unit/test_quantization_accuracy.py; smaller is not free.