Synthetic data generator for record linkage benchmarking.
Rust + Python — 40 domains, 500K+ rec/s.
Generate synthetic multi-entity datasets with realistic schemas, controlled duplicates, hard negatives, and ground-truth labels. Designed for benchmarking entity resolution (deduplication) and record linkage pipelines.
Quick start
Python (pip)
pip install dupehell
from dupehell import generate
r = generate(domain="publishing", size=10000, seed=42, difficulty="hard")
print(r.dataset) # ./publishing_<hash>.ipc
print(r.ground_truth) # ./publishing_<hash>_ground_truth.ipc
print(r.total_records) # ~10150
CLI (Rust)
cargo run --release -- --domain kyc --size 100000 --seed 42
Output
| Format | Extension | Notes |
|---|---|---|
| IPC (Arrow) | .ipc |
Default, fastest write |
| Parquet | .parquet |
Via --parquet flag |
Each run produces:
{domain}_{hash}.ipc— main dataset{domain}_{hash}_ground_truth.ipc— ground-truth labels
CLI options
| Option | Default | Description |
|---|---|---|
--domain |
kyc |
Domain name |
--size |
1000000 |
Base records |
--seed |
42 |
PRNG seed |
--difficulty |
medium |
light / medium / hard / hell |
--output-format |
ipc |
ipc or parquet |
--output-dir |
. |
Output directory |
Features
- 40 domains — KYC, publishing, fintech, blockchain, technology, banking, healthcare, ecommerce, automotive, cybersecurity, gaming, and 30 more
- Multi-entity schemas — 3–5 entity types per domain (person, account, address, transaction)
- Controlled noise — typos, OCR errors, homoglyphs, date swaps, phonetic variants, Unicode pollution
- Hard negatives —
same_field,mix_identifier,mix_arraysprimitives - Ground truth — full match labels (exact_dup, hard_neg, singleton) with cluster statistics
- Deterministic — seeded RNG (
rand_pcg) for reproducible output
Performance
All runs on Lenovo ThinkPad P16 Gen 2 — Intel Core i7 13th, 32 GB DDR5, SK Hynix 1 TB NVMe. Difficulty hell, IPC format. Throughput averaged across all 40 domains.
Multi-domain throughput (hell, IPC)
| Size | Ø rec/s | Fastest domain | Slowest domain | Range |
|---|---|---|---|---|
| 1M | 280,175 | academia 3.2s | supplychain 4.5s | 1.3s |
| 5M | 632,487 | aviation 6.8s | crm 10.5s | 3.7s |
| 10M | 677,579 | academia 11.8s | manufacturing 23.6s | 11.8s |
| 20M | 746,520 | academia 21.6s | kyc 34.6s | 13.0s |
IPC vs Parquet
Difficulty hell, domain-average throughput.
| Size | IPC | Parquet |
|---|---|---|
| 1M | 280.2K rec/s | 228.6K rec/s |
| 5M | 632.5K rec/s | 445.5K rec/s |
| 10M | 677.6K rec/s | 456.1K rec/s |
| 20M | 746.5K rec/s | — |
See docs/BENCHMARK.md for KYC medium-difficulty single-domain metrics and full per-domain breakdowns at all sizes.
Architecture
lib.rs / main.rs → Context (133 pools) → PipelineConfig → run_pipeline()
│
┌────────────────────────────────────────────────┼────────────────────┐
▼ ▼ ▼
entity_gen.rs fk_remap.rs hn_common.rs
(batch gen) (FK cross-ref) (hard negatives)
│ │ │
└────────────────────────────────────────────────┴────────────────────┘
▼
pipeline.rs
(merge + GT + IPC write)
▼
{domain}.ipc + GT.ipc
Documentation
| File | Description |
|---|---|
| docs/GETTING_STARTED.md | Installation, quick start, output formats |
| docs/API.md | Full Python & Rust API reference |
| docs/CONTRIBUTING.md | Architecture, development workflow |
| docs/BENCHMARK.md | Performance metrics (up to 75M records) |
| docs/SECURITY.md | Security policy & vulnerability reporting |
Domains
Academia · Agriculture · Automotive · Aviation · Banking · Biotech · Blockchain · Construction · CRM · Cybersecurity · Ecommerce · Education · Energy · Fashion · Fintech · Food & Beverage · Gaming · Healthcare · Hospitality · HR · Insurance · KYC · Legal · Logistics · Manufacturing · Maritime · Media · Mining · Nonprofit · Pharma · Publishing · Real Estate · Renewable Energy · Retail · Social Media · Sports · Supply Chain · Technology · Telecom · Travel
Roadmap
- Graph generation — model entity relationships as property graphs (nodes, edges, attributes) for graph-based entity resolution and community detection benchmarking
- Synthetic identity module — generate realistic digital identities (browser fingerprints, device profiles, network patterns) for cybersecurity simulation and threat detection research
- Performance — continue pushing throughput via smarter batching, column-level parallelism, and reduced allocations
Development
cargo test # 113 tests, ~30s
cargo build --release
cargo clippy # 0 warnings
cargo fmt --check # all formatted
Python wheel
pip install maturin
maturin build --release
pip install target/wheels/dupehell-*.whl
License
MIT — Educational Use Only.
This software generates synthetic data for research and educational purposes only. It must not be used for fraud, identity theft, surveillance, or any illegal activity. See ETHICS.md for the full list of prohibited uses and responsible disclosure policy.
If you use DupeHell in your research, please cite:
@software{dupehell2026,
author = {DupeHell Contributors},
title = {DupeHell: Synthetic Multi-Domain Dataset Generator for
Record Linkage Benchmarking},
year = {2026},
url = {https://github.com/vntoinekaio/DupeHell}
}
Metadata
Release files for dupehell 0.4.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dupehell-0.4.3-cp310-abi3-win_amd64.whl | CPython 3.10 | abi3 | Windows x86-64 | Details |
| dupehell-0.4.3-cp310-abi3-manylinux_2_34_x86_64.whl | CPython 3.10 | abi3 | Linux glibc 2.34+ x86-64 | Details |
| dupehell-0.4.3-cp310-abi3-macosx_11_0_arm64.whl | CPython 3.10 | abi3 | macOS 11.0+ ARM64 | Details |
Total release size: 10.3 MB
Release files / dupehell-0.4.3-cp310-abi3-win_amd64.whl
| Download URL | dupehell-0.4.3-cp310-abi3-win_amd64.whl |
|---|---|
| Size | 3.5 MB |
| Tags | CPython 3.10 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
ed8af691e92d6744576d1d8d40cc19c23fcf8a26ad4e5dda0ff4a103cf0da14b
|
|
BLAKE2b-256 checksum How to use checksums |
2b5f31986242e9bdba70c1e018ee6c1dc6c0e31f2356b3e170817d89b1ecab72
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.14.1
|
Release files / dupehell-0.4.3-cp310-abi3-manylinux_2_34_x86_64.whl
| Download URL | dupehell-0.4.3-cp310-abi3-manylinux_2_34_x86_64.whl |
|---|---|
| Size | 3.6 MB |
| Tags | CPython 3.10 Linux glibc 2.34+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
f61e8dfe2321588b6195a0d3fb1408fd77c9308218185d19d96700ce0765c92d
|
|
BLAKE2b-256 checksum How to use checksums |
46e38a6e2e8bcc279f98c3f909bd609ffa9ff5c6f1be50fbb435609614dfc44d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.14.1
|
Release files / dupehell-0.4.3-cp310-abi3-macosx_11_0_arm64.whl
| Download URL | dupehell-0.4.3-cp310-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 3.2 MB |
| Tags | CPython 3.10 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
93014425d3c443d4d97ff50e41261ed46208893d6e12e0004aa91f83f7bc179a
|
|
BLAKE2b-256 checksum How to use checksums |
7f6508f4b05b2173f22fa788b7847b40650c133c96f182302f223a9f5076bf88
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.14.1
|