redknightlois
## Goal The dataset provider framework that downloads, caches, and imports benchmark data into RavenDB before the benchmark runs. ## Global invariants - This epic inherits the systemic architectural invariants from #13. - **Critical for this epic: SI-07 (fail fast on empty keyspace — datasets satisfy this precondition for read/query workloads)** ## Related epics - #14 Load Generation Engine — the runner imports datasets before the step loop begins - #16 Workloads and Key Distribution — dataset providers seed the keyspace that workloads require - #20 Vector Datasets — vector-specific dataset providers extend this framework ## Architectural invariants - Dataset providers implement a common interface with name, info, database naming, and import-check methods. Providers are registered by name and resolved case-insensitively. - Import is idempotent. The import check verifies document count and collection existence before re-importing. Skip-if-exists defaults to true. - StackOverflow provider uses streaming download with progress reporting and imports via RavenDB Smuggler. It supports tiered profiles (small/half/full) and custom sizes. - Database names are derived from the dataset profile. When `--dataset` is set but `--database` is not, the provider generates the name. - Downloads are cached locally with a configurable cache directory.