Engula RDBPerf (Reducing RDB save/load time)

Engula RDBPerf is provided as a Docker image for comparing the performance of Engula and Redis in RDB file save (SAVE) and load (LOAD/RELOAD) scenarios. It helps you evaluate whether RDB save/load time can be reduced, and observe RDB file size and memory usage characteristics.

1. Tool Overview and Design Goals

Goal: Compare Engula and Redis RDB SAVE / LOAD performance, as well as RDB file size and memory usage, under the same data scale.

Metric definitions:

  • Save Time — Time to generate the RDB file
  • Reload / Load Time — Time to load the RDB file
  • RDB Size — Size of the generated RDB file
  • Memory Usage — Memory usage after data loading completes

Two test modes:

Mode Use Case
Mode 1: Compare existing RDB files Use real business RDB files to evaluate the load/save performance and compatibility of different engines
Mode 2: Auto-generate data for comparison Standardized benchmarking, comparing different data scales, types, and memory tiers

The tool automatically starts and manages the Redis and Engula service processes, and cleans up automatically when the test finishes — no manual startup required.

2. Notes and Runtime Environment

  • RDB SAVE / LOAD performance results vary with the actual RDB data characteristics (data distribution, value size, compression, key count).
  • SAVE / LOAD performance is also affected by hardware and is closely related to CPU, memory, and especially disk performance. We recommend testing on a machine with a local SSD and configuring the data directory under the target mount directory to reduce interference from differences in storage media.
  • Minimum runtime environment:
    • CentOS ≥ 7.9 or Ubuntu ≥ 18.04
    • Docker installed and running normally
    • Host memory ≥ 64G

3. Quick Start (Pull the Image)

1docker pull registry.ap-southeast-1.aliyuncs.com/montplex/engula-rdb-perf:latest

4. Mode 1: Compare Existing RDB Files

Use Redis and Engula to load/save the specified RDB file respectively, recording load time, save time, and memory usage.

The /path/to/your/... in the commands below are placeholder paths. Before running, replace them with the actual paths on your machine (the absolute path to the RDB file or directory).

4.1 A Single RDB File

1mkdir -p $(pwd)/results
2
3docker run --rm -it \
4  -v /path/to/your/dump.rdb:/rdbs/dump.rdb:ro \
5  -v $(pwd)/results:/work/results \
6  registry.ap-southeast-1.aliyuncs.com/montplex/engula-rdb-perf:latest \
7  proof tool rdb-save-load --rdb /rdbs/dump.rdb --results-dir /work/results

The single-RDB-file test displays a TUI progress bar by default, so you must allocate a pseudo-terminal with -it.

Terminal result:

Single-file test terminal result

HTML report:

Single-file test HTML report

4.2 Multiple RDB Files (Multiple --rdb)

1docker run --rm \
2  -v /path/to/your/rdbs:/rdbs:ro \
3  -v $(pwd)/results:/work/results \
4  registry.ap-southeast-1.aliyuncs.com/montplex/engula-rdb-perf:latest \
5  proof tool rdb-save-load \
6    --rdb /rdbs/file1.rdb \
7    --rdb /rdbs/file2.rdb \
8    --rdb /rdbs/file3.rdb \
9    --results-dir /work/results

Terminal result:

Multi-file test terminal result

HTML report:

Multi-file test HTML report

4.3 RDB File Directory (--rdb-dir)

Use all .rdb files in the directory as test targets (recursive search):

1docker run --rm \
2  -v /path/to/your/rdb-files:/rdbs:ro \
3  -v $(pwd)/results:/work/results \
4  registry.ap-southeast-1.aliyuncs.com/montplex/engula-rdb-perf:latest \
5  proof tool rdb-save-load --rdb-dir /rdbs --results-dir /work/results

Terminal result:

Directory test terminal result

HTML report:

Directory test HTML report

4.4 Output Artifacts

After the run finishes, reports are generated in the results directory:

1results/
2└── tool-rdb-save-load/
3    └── 20260508T070920/
4        ├── report.html   # HTML report
5        ├── results.json  # JSON summary
6        └── main.log      # Detailed log (requires --verbose)

5. Mode 2: Auto-Generate Data for Comparison (perf 3.5)

The tool automatically generates Key-Value data of the specified scale and type, then fills, saves, loads, and compares it using Redis and Engula respectively.

5.1 Full Test (1GB + 4GB + 8GB, approximately 20–40 minutes)

1mkdir -p $(pwd)/results
2
3docker run --rm \
4  -v $(pwd)/results:/work/results \
5  registry.ap-southeast-1.aliyuncs.com/montplex/engula-rdb-perf:latest \
6  proof test perf --sub 3.5 --results-dir /work/results

5.2 Quick Test (1GB only, approximately 2–5 minutes)

1mkdir -p $(pwd)/results
2
3docker run --rm \
4  -v $(pwd)/results:/work/results \
5  registry.ap-southeast-1.aliyuncs.com/montplex/engula-rdb-perf:latest \
6  proof test perf --sub 3.5 --results-dir /work/results --perf-rdb-maxmemory 1gb

Terminal result:

Auto-generated data test terminal result

HTML report:

Auto-generated data test HTML report

5.3 Output Artifacts

1results/
2└── perf-3.5-rdb-save-load-logs/
3    └── 20260508T123456/
4        ├── engula.log   # Engula service log
5        ├── redis.log    # Redis service log
6        ├── matrix.json  # Matrix results
7        └── report.html  # HTML report (can be opened directly in a browser)

6. Data Types and Test Parameters

Supported data types:

Data Type Description
String Simple string value
Hash Field-value pairs
List List (LPUSH/RPOP)
Set Set (SADD)

Test parameter ranges (Mode 2):

  • Memory tiers (maxmemory): 1GB, 4GB, 8GB
  • Value size tier: 256B
  • Key count: Automatically calculated based on value size and memory tier, ensuring the specified memory is filled to approximately 80%

Data type × memory tier matrix:

Data Type 1GB 4GB 8GB
String
Hash
List
Set

7. Interpreting Results

7.1 Terminal Table Fields

Field Description
r-reload Time for Redis to reload (restart and load after SAVE) the RDB file
r-save Time for Redis to save the RDB file
r-mem Redis memory usage after loading
e-reload Time for Engula to reload (restart and load after SAVE) the RDB file
e-save Time for Engula to save the RDB file
e-mem Engula memory usage after loading

7.2 HTML Report Contents

The HTML report includes a Summary (overall comparison conclusions), Matrix (data type × memory tier details), Ratios (Engula-to-Redis time/memory ratios), and Logs (complete test logs), and supports filtering by data type, memory tier, and value size.

HTML report example

Performance reference: Save / Reload time ratios (Engula / Redis, lower is better); a memory usage ratio of approximately 40%–70% is normal, and lower is better.

7.3 results.json Example

1[
2  {
3    "db": "engula",
4    "keys": 50000000,
5    "valueLength": 128,
6    "saveTimeSec": 3.54,
7    "loadTimeSec": 4.05,
8    "rdbSizeMB": 6287.0,
9    "usedMemoryMB": 6275.9,
10    "dbSize": 50004700,
11    "saveStatus": "ok"
12  },
13  {
14    "db": "redis",
15    "keys": 50000000,
16    "valueLength": 128,
17    "saveTimeSec": 34.85,
18    "loadTimeSec": 24.50,
19    "rdbSizeMB": 6919.8,
20    "usedMemoryMB": 10813.5,
21    "dbSize": 50004000,
22    "saveStatus": "ok"
23  }
24]

8. Measured Benchmark Data

This section presents a set of benchmark results under specific conditions. Results vary with data characteristics and hardware, and use a different measurement basis than the §6 parameter matrix (value 256B, 1/4/8GB) — the two cannot be directly extrapolated from each other.

Test environment and targets:

  • 13th Gen Intel(R) Core(TM) i5-13600K
  • Memory: Kingston DDR4 64G
  • Disk: Samsung SSD 980 PRO
  • Test targets: Engula 2.2.0 and Redis 7.2.11
  • Test conditions: 50 million keys, value = 128B
Metric Redis Engula Improvement
Save time 34.85s 3.54s 9.8x faster
Load time 24.50s 4.05s 6.1x faster
RDB file size 6919.8 MB 6287.0 MB 9% smaller
Memory usage 10813.5 MB 6275.9 MB 42% lower
Key count 50,004,000 50,004,700 Essentially the same
1Engula:  save=3.54s   load=4.05s   rdb=6287.0MB  mem=6275.9MB
2Redis:   save=34.85s  load=24.50s  rdb=6919.8MB  mem=10813.5MB

9. How It Works

Traditional RDB path (Redis/Valkey):

1Save: redisDB → robj serialize → RDB encode (LZF) → disk
2Load: disk → RDB decode (LZF decompress) → robj deserialize → redisDB

Engula RDB fast path:

1Save: memblocks → sequential batch write (zero decompression) → hashtable snapshot
2Load: sequential batch read → rebuild index (zero compression) → hashtable restore

10. FAQ

10.1 Do I need to start Redis and Engula separately for testing?

No. The tool automatically starts and manages the Redis and Engula service processes inside the container, and cleans up automatically when the test completes.

10.2 How do I test only specific data types?

In Mode 2, specify them with --rdb-types:

1docker run --rm -v $(pwd)/results:/work/results \
2  registry.ap-southeast-1.aliyuncs.com/montplex/engula-rdb-perf:latest \
3  proof test perf --sub 3.5 --results-dir /work/results --rdb-types string,hash

10.3 How do I test only a specific memory tier?

1docker run --rm -v $(pwd)/results:/work/results \
2  registry.ap-southeast-1.aliyuncs.com/montplex/engula-rdb-perf:latest \
3  proof test perf --sub 3.5 --results-dir /work/results --perf-rdb-maxmemory 4gb

10.4 Service Fails to Start or Connection Times Out

The tool self-manages the Redis/Engula processes and ports inside the container, so you generally do not need to check host ports. Please confirm:

  • The -v mount paths are correct (RDB files are mounted read-only to /rdbs with :ro, and the results directory is mounted to /work/results);
  • Host resources are sufficient (memory ≥ 64G, with enough disk space to hold the RDB files and results);
  • If you need to expose the in-container services externally, use docker run -p to explicitly map the ports.

10.5 What's the Difference Between TUI and Console Output?

  • TUI mode (a single RDB file + -it): Real-time progress bar and dynamic comparison panel.
  • Console mode (multiple files or with --no-tui): Static tables, with compact results that are easy to archive.

10.6 Non-Docker Method

If you need to use the non-Docker (binary) method, please contact the Engula team.