Columnar Properties¶
Properties are stored in a columnar format for efficient access and compression.
Why Columnar?¶
| Benefit | Description |
|---|---|
| Compression | Same-type values compress better |
| Cache efficiency | Sequential access patterns |
| Vectorization | SIMD-friendly operations |
| Selective reads | Only read needed columns |
Storage Layout¶
Property Store for "Person" nodes:
┌─────────────────────────────────────────────┐
│ Column: "name" (String) │
├─────────────────────────────────────────────┤
│ ["Alice", "Bob", "Carol", "Dave", ...] │
├─────────────────────────────────────────────┤
│ Column: "age" (Int64) │
├─────────────────────────────────────────────┤
│ [30, 25, 35, 28, ...] │
├─────────────────────────────────────────────┤
│ Column: "active" (Bool) │
├─────────────────────────────────────────────┤
│ [true, true, false, true, ...] │
└─────────────────────────────────────────────┘
Type-Specific Storage¶
| Type | Storage Format |
|---|---|
| Bool | Bit-packed array |
| Int64 | Native array or delta-encoded |
| Float64 | Native array |
| String | Dictionary + offsets |
| List | Nested columnar |
Null Handling¶
Nulls are tracked with a validity bitmap: