Add the TC-1 ingestion-throughput benchmark for the Table Mode write path - #120
Open
PDGGK wants to merge 1 commit into
Open
Add the TC-1 ingestion-throughput benchmark for the Table Mode write path#120PDGGK wants to merge 1 commit into
PDGGK wants to merge 1 commit into
Conversation
…path Adds a JUnit-driven smoke benchmark that drives the real save path -- bounded queue, single flush worker, multi-row Tablet insert -- against the same apache/iotdb:2.0.8-standalone Testcontainer the functional integration tests use, and reports records/sec, error rate and writer statistics. The test asserts a deliberately conservative floor of 1,000 rows/sec plus strict correctness: zero failures, zero rejects, flushed equal to rows written, and sampled rows readable back from IoTDB. Its job is to catch a gross throughput regression and to prove real end-to-end ingestion, not to certify a headline number -- 50 saver threads drive only 50 distinct devices, entity_id is a TAG column so device cardinality materially changes the workload, and 30,000 rows fit entirely in the 50,000-row queue, so the run exercises no back-pressure. It carries the benchmark tag and is not part of the default test run. docs/benchmarks records the case definition, the two profiles, and the measured result with its provenance: a shared developer laptop under Docker Desktop rather than a dedicated benchmark host. Two back-to-back runs on that host measured 54,292 and 61,936 rows/sec with a zero error rate; the report anchors on the conservative figure and states explicitly that this does not constitute a pass of the sustained full-profile target, which is defined for 1,000 devices on dedicated hardware and remains deferred. docker-compose.bench.yml provides the equivalent stack for running the case outside JUnit. Signed-off-by: Zihan Dai <99155080+PDGGK@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds the TC-1 ingestion-throughput benchmark for the IoTDB Table Mode write path, together with the case definition and the measured result.
What it does
IoTDBTableIngestionBenchmarkITdrives the real save path — bounded queue, single flush worker, multi-rowTabletinsert — against the sameapache/iotdb:2.0.8-standaloneTestcontainer the functional integration tests use, then reports records/sec, error rate and writer statistics.It asserts a deliberately conservative floor of 1,000 rows/sec plus strict correctness: zero failures, zero rejects,
flushedequal to rows written, and sampled rows readable back from IoTDB. The job is to catch a gross throughput regression and to prove real end-to-end ingestion — not to certify a headline number. It carries@Tag("benchmark")and is not part of the default test run.On the number, and what it is not
Two back-to-back runs on this branch measured 54,292 and 61,936 rows/sec with a zero error rate;
docs/benchmarks/report.mdanchors on the conservative figure.The report is explicit that this is not a pass of the sustained full-profile target, and records why:
entity_idis a TAG column, so device cardinality materially changes the write workload;It also records the host provenance — a shared developer laptop under Docker Desktop, not dedicated benchmark hardware — so the figure can be read for what it is. The full profile is marked deferred with an explicit to-be-filled list.
docker-compose.bench.ymlprovides the equivalent stack for running the case outside JUnit.Scope
Test, docs and a compose file. No production code, no new dependency.