GitHub user rzo1 added a comment to the discussion: Help us test StormCrawler 
4.0 before the release

I ran the [SpoutBenchmark](https://github.com/apache/stormcrawler/pull/2226) 
and [StatusUpdaterBenchmark](https://github.com/apache/stormcrawler/pull/2213) 
with the setup from 
[stormcrawler-benchmark](https://github.com/DigitalPebble/stormcrawler-benchmark)
 against OpenSearch, URLFrontier and Solr.

**Setup**

- `main` at 21b1646b (https://github.com/apache/stormcrawler/commit/21b1646b), 
built from source
- Apple M5 Max (18 cores), 128 GB RAM, internal SSD, macOS 26.6
- Docker Desktop 29.9.2, VM with 18 threads and 8 GB RAM, one backend at a 
time, data inside the container rather than bind-mounted
- Java 25.0.5, Storm 3.1.0, utilities run with `storm local`, `-Xmx8g`
- 4 GB heap for every backend (6 GB doesn't fit in the VM)
- OpenSearch 3.9.0, `crawlercommons/url-frontier:latest` (2.6) with the repo's 
`config.ini`, Solr 10.1.0 in cloud mode
- `benchmark-conf.yaml` from the repo. For Solr I added the `stormcrawler-solr` 
dependency and:
  ```yaml
  solr.status.url: "http://localhost:8983/solr/status";
  solr.status.routing.fieldname: "key"
  solr.status.routing.shards: 10
  solr.status.bucket.field: key
  solr.status.bucket.maxsize: 10
  solr.status.max.results: 1000
  solr.status.batchUpdateSize: 500
  ```
  The `status` collection was created with 10 shards and `compositeId` routing 
on `key`, so that the 10 spouts match the 10 shards, as `SolrSpout` requires.
- Input: synthetic, `./generate-input.py --queues 100000 --urls-per-queue 100 
--fanout 50`, which gives 10.1M lines and 10M unique URLs on 100k hosts. The 
figures can't be compared with the ones in the repo, which come from a real 
crawl dump four times larger.

**Writes** (1 status updater)

| Backend | Time | URLs / sec |
|---|---:|---:|
| baseline | 0.8 s | 12,154,031 |
| URLFrontier 2.6 | 40 s | 252,386 |
| OpenSearch 3.9.0 | 56 s | 180,116 |
| Solr 10.1.0 | 2 min 41 s | 62,883 |

**Reads** (10 spouts, 1 status updater, 3 min)

| Backend / spout | Unique URLs / sec | Unique URLs in 3 min |
|---|---:|---:|
| URLFrontier 2.6 | 24,973 | 4,495,068 |
| OpenSearch, `HybridSpout` | 20,969 | 3,774,598 |
| OpenSearch, `AggregationSpout` | 16,040 | 2,887,391 |
| Solr, `SolrSpout` | 8,055 | 1,450,008 |

No failed URLs in any run, and every backend held exactly 10M URLs after the 
writes. URLFrontier emitted 3 URLs twice; the other backends emitted no 
duplicates. A second OpenSearch write run gave 218,984 URLs / sec, so expect 
some variance between runs. The page cache of the Docker VM was dropped once 
during the `AggregationSpout` read run, which may have lowered that figure a 
bit. These are single runs on a laptop.

**Found**

- `run-benchmark.sh` didn't work on macOS: `/proc`, `drop_caches`, `swapoff`, 
`nproc`, and decimal commas in the CSVs with a German locale. Fix: 
DigitalPebble/stormcrawler-benchmark#1
- `SolrSpout` throws an exception unless the number of spouts equals the number 
of `status` shards. This is by design, but worth keeping in mind when 
benchmarking Solr with several spouts.


GitHub link: 
https://github.com/apache/stormcrawler/discussions/2268#discussioncomment-19348203

----
This is an automatically sent email for [email protected].
To unsubscribe, please send an email to: [email protected]

Reply via email to