MySQL + RocksDB For Better Storage Efficiency Than InnoDB
XLDB 2015 Lightning Talk Siying Dong, Software Engineer Database Engineering Team @ Facebook Facebook Website Architecture
Data center Web servers
Caches
MySQL Databases Facebook Website Architecture
Data center Web servers
Caches
MySQL Databases
SSD s Facebook Website Architecture
Data center Web servers
Caches
▪ SSD Capacity is the bottleneck
MySQL ▪ Also want to write fewer Databases bytes to SSDs
SSD s MySQL + RocksDB (MyRocks)
▪ RocksDB
▪ Embedded persistent key-value store
▪ Log-Structure-Merge tree
▪ Open-Sourced
▪ RocksDB Storage Engine in MySQL https://github.com/MySQLOnRocksDB/mysql-5.6 InnoDB vs. RocksDB Storage Engines DB Size (GB) Cumulative GB Written 2500 7000 InnoDB 6000 2000 RocksDB 5000 1500 4000 1000 3000
GB Written GB 2000 500 1000 0 0 InnoDB RocksDB Day 1 Day 2 Day 3 Day 4 Day 5 Day 6 Day 7 ▪ Workload: Social Graph Data (Edges + Vertexes)
▪ RocksDB: zlib compression from L3 InnoDB: edges use zlib, vertexes are pre-compressed. Lower Space Amplification
Uncompressed 16KB page Row Row Wasted Row Level 0 Compressed to 5KB
Level 1 Target 1GB Row
Row s
t Wasted a
l
e Level 2 Target 10 GB Row
Using 8KB space s
t a Target 100 GB on storage l Level 3
e
Row
s s s s
Row t t t t Waste a a a a
l l Level 4 l l Wasted e e e e Row Target 1000 GB 4KB 4KB Lower Write Amplification (Worst Case) Write amp 1
f
l
u
s
h Level 0
Row Row Write Amp 10
M
Row e
r Row g Level 1 Target 1GB Modify e Row Row Write Amp 10
Row M
Row e
r
g Level 2 Target 10 GB
e Row Row Write Amp 10
M
Read Write e
r Target 100 GB g Level 3
e
Write Amp 10
M
e
Write Amp = Page size / row size r g Level 4
e
Target 1000 GB Conclusion
▪ Current bottlenecks of our MySQL databases:
▪ disk capacity
▪ bytes written
▪ MySQL + RocksDB vs. InnoDB
▪ compresses better
▪ writes less data to storage devices
▪ We anticipate RocksDB will be able to replace many uses of InnoDB after some more work (c) 2009 Facebook, Inc. or its licensors. "Facebook" is a registered trademark of Facebook, Inc.. All rights reserved. 1.0