nomad / cola

🥤 A text CRDT for real-time collaborative editing
https://crates.io/crates/cola
MIT License
493 stars 12 forks source link

Rewrite the encoding scheme for integers #8

Closed noib3 closed 7 months ago

noib3 commented 7 months ago

Rewrote the integer encoding/decoding logic. It now takes 1 byte to encode 0..63 and 2 to encode 64..2**15. Integers >= than 2**15 are always encoded with a prefix byte that represents their length.

# Before
serde_json | Replica: 596.94 KB
serde_json | Total insertions: 6.62 MB
serde_json | Total deletions: 4.04 MB

bincode | Replica: 229.98 KB
bincode | Total insertions: 3.96 MB
bincode | Total deletions: 2.16 MB

zstd'd serde_json | Replica: 153.61 KB
zstd'd serde_json | Total insertions: 7.36 MB
zstd'd serde_json | Total deletions: 4.61 MB

zstd'd bincode | Replica: 128.68 KB
zstd'd bincode | Total insertions: 5.52 MB
zstd'd bincode | Total deletions: 2.82 MB
# After
serde_json | Replica: 553.96 KB
serde_json | Total insertions: 5.98 MB
serde_json | Total deletions: 3.78 MB

bincode | Replica: 163.05 KB
bincode | Total insertions: 3.24 MB
bincode | Total deletions: 1.81 MB

zstd'd serde_json | Replica: 156.95 KB
zstd'd serde_json | Total insertions: 7.08 MB
zstd'd serde_json | Total deletions: 4.42 MB

zstd'd bincode | Replica: 134.37 KB
zstd'd bincode | Total insertions: 4.81 MB
zstd'd bincode | Total deletions: 2.47 MB