Beste mededevelopers,
Ik loop tegen hardnekkige timeout-problemen aan bij het periodiek binnenhalen van datasets van Open Data RDW (Socrata API).
Een voorbeeld is het inlezen van de dataset 'Open Data RDW: Keuringen', die op het moment van schrijven 12181826 records bevat, bepaald via:
https://opendata.rdw.nl/resource/vkij-7mwc.json?$select=count(*)Mijn Stack en aanpak
* Omgeving: C# Console Applicatie
* Framework: .NET Framework 4.8
* Authenticatie: Ik geef apptoken mee in de headers van de request.
* Paginering: Ik maak gebruik van een dynamische blokgrootte (batching). Ik begin met een `$limit` van 50.000 rows. Als er een fout/timeout optreedt, val ik direct terug naar een blokgrootte van 500 rows. Zodra dit weer stabiel draait, schaal ik de blokgrootte stapsgewijs op richting de max van 50.000.
* Als er een timeout optreedt heb ik in de applicatie ook een timeout ingebouwd voordat ik een nieuwe call ga doen. Deze timeout is ook dynamisch, als er meerdere fouten achter elkaar optreden, vergroot de timeout stapsgewijs.
* Gedrag treedt op bij gebruik van zowel HttpWebRequest als HttpClient
* In mijn applicatie staat de `HttpWebRequest`/`HttpClient` timeout ingesteld op 5 minuten (300 seconden).
* De timeouts krijg ik op meerdere (grote) datasets.
* Ik heb de indruk dat ik tegenwoordig vaker een timeout krijg dan eerder.
Een voorbeeld van een URL die mijn applicatie genereert:
https://opendata.rdw.nl/resource/vkij-7mwc.json?$offset=650000&$limit=50000&$order=:id DESC
Het vreemde is dat de API enorm inconsistent presteert. Dezelfde blokgrootte van 50.000 records ophalen duurt de ene keer 2 seconden, en de andere keer schiet het over de 5 minuten heen met een timeout tot gevolg. Zelfs een kleine batch van 500 records doet er soms ineens minuten over.
Mijn vragen aan jullie:
1. Ervaren anderen dit ook? Zijn deze extreme bottlenecks en timeouts een bekend fenomeen bij de Socrata API van de RDW bij (grote) datasets?
2. Is mijn aanpak wel optimaal? Een timeout van 5 minuten lijkt mij meer dan voldoende te zijn. Zie ik iets over het hoofd qua throttling of sortering?
Alle suggesties of best practices om miljoenen records stabieler te kunnen syncen zijn van harte welkom!
Hieronder een greep uit mijn logging waarin goed de variatie in responsetijd te zien is:
18-06-2026 09:21:40.407 batch 0 -> 50.000... OK, Fetched: 50.000 (9 sec 915 ms)
18-06-2026 09:21:50.871 batch 50.000 -> 100.000... OK, Fetched: 50.000 (40 sec 478 ms)
18-06-2026 09:22:32.042 batch 100.000 -> 150.000... OK, Fetched: 50.000 (46 sec 784 ms)
18-06-2026 09:23:19.636 batch 150.000 -> 200.000... OK, Fetched: 50.000 (1 min 9 sec 83 ms)
18-06-2026 09:24:29.321 batch 200.000 -> 250.000... OK, Fetched: 50.000 (34 sec 134 ms)
18-06-2026 09:25:04.042 batch 250.000 -> 300.000... OK, Fetched: 50.000 (3 min 16 sec 907 ms)
18-06-2026 09:28:21.537 batch 300.000 -> 350.000... OK, Fetched: 50.000 (15 sec 464 ms)
18-06-2026 09:28:37.374 batch 350.000 -> 400.000... OK, Fetched: 50.000 (1 min 4 sec 521 ms)
18-06-2026 09:29:42.457 batch 400.000 -> 450.000... OK, Fetched: 50.000 (29 sec 880 ms)
18-06-2026 09:30:12.979 batch 450.000 -> 500.000... OK, Fetched: 50.000 (35 sec 239 ms)
18-06-2026 09:30:48.885 batch 500.000 -> 550.000... OK, Fetched: 50.000 (1 min 23 sec 402 ms)
18-06-2026 09:32:12.918 batch 550.000 -> 600.000... OK, Fetched: 50.000 (19 sec 668 ms)
18-06-2026 09:32:32.975 batch 600.000 -> 650.000... OK, Fetched: 50.000 (5 sec 986 ms)
18-06-2026 09:32:39.424 batch 650.000 -> 700.000... OK, Fetched: 50.000 (1 min 1 sec 636 ms)
18-06-2026 09:33:41.614 batch 700.000 -> 750.000... OK, Fetched: 50.000 (27 sec 158 ms)
18-06-2026 09:34:09.329 batch 750.000 -> 800.000... OK, Fetched: 50.000 (3 sec 761 ms)
18-06-2026 09:34:13.461 batch 800.000 -> 850.000... OK, Fetched: 50.000 (7 sec 920 ms)
18-06-2026 09:34:21.769 batch 850.000 -> 900.000... OK, Fetched: 50.000 (3 min 15 sec 95 ms)
18-06-2026 09:37:37.488 batch 900.000 -> 950.000... OK, Fetched: 50.000 (4 min 28 sec 3 ms)
18-06-2026 09:37:37.488 batch 900.000 -> 950.000... OK, Fetched: 50.000 (4 min 28 sec 3 ms)
18-06-2026 09:42:06.047 batch 950.000 -> 1.000.000... OK, Fetched: 50.000 (3 min 54 sec 174 ms)
18-06-2026 09:46:00.821 batch 1.000.000 -> 1.050.000... OK, Fetched: 50.000 (38 sec 472 ms)
18-06-2026 09:46:39.912 batch 1.050.000 -> 1.100.000... Error 1: RDW Webservice timeout na 300 seconden.
18-06-2026 09:51:45.200 batch 1.050.000 -> 1.050.500... OK, Fetched: 500 (3 min 6 sec 846 ms)
18-06-2026 09:54:52.294 batch 1.050.500 -> 1.051.000... OK, Fetched: 500 (1 min 25 sec 428 ms)
...... (aantal rows inlezen wordt stapgewijs verhoogd naar 50000)
18-06-2026 10:03:41.516 batch 1.407.000 -> 1.457.000... OK, Fetched: 50.000 (2 sec 189 ms)
18-06-2026 10:03:44.119 batch 1.457.000 -> 1.507.000... OK, Fetched: 50.000 (8 sec 695 ms)
18-06-2026 10:03:53.258 batch 1.507.000 -> 1.557.000... Error 1: RDW Webservice timeout na 300 seconden.
18-06-2026 10:09:03.549 batch 1.507.000 -> 1.507.500... Error 1: RDW Webservice timeout na 300 seconden.
18-06-2026 10:14:18.837 batch 1.507.000 -> 1.507.500... OK, Fetched: 500 (2 min 55 sec 868 ms)
18-06-2026 10:17:14.778 batch 1.507.500 -> 1.508.000... OK, Fetched: 500 (2 min 42 sec 304 ms)
18-06-2026 10:19:57.178 batch 1.508.000 -> 1.508.500... OK, Fetched: 500 (55 sec 452 ms)
...... (aantal rows inlezen wordt stapgewijs verhoogd naar 50000)
18-06-2026 10:32:35.721 batch 6.614.000 -> 6.664.000... OK, Fetched: 50.000 (3 min 34 sec 579 ms)
18-06-2026 10:36:10.856 batch 6.664.000 -> 6.714.000... Error 1: RDW Webservice timeout na 300 seconden.
18-06-2026 10:41:31.175 batch 6.664.000 -> 6.664.500... OK, Fetched: 500 (25 sec 191 ms)
18-06-2026 10:41:56.502 batch 6.664.500 -> 6.665.000... OK, Fetched: 500 (4 sec 788 ms)
18-06-2026 10:42:01.332 batch 6.665.000 -> 6.665.500... OK, Fetched: 500 (2 sec 551 ms)
18-06-2026 10:42:03.941 batch 6.665.500 -> 6.666.000... Error 1: RDW Webservice timeout na 300 seconden.
18-06-2026 10:47:29.246 batch 6.665.500 -> 6.666.000... OK, Fetched: 500 (4 min 13 sec 791 ms)
18-06-2026 10:51:43.132 batch 6.666.000 -> 6.666.500... OK, Fetched: 500 (14 sec 576 ms)
... (aantal rows inlezen wordt stapgewijs verhoogd naar 50000)
18-06-2026 11:01:49.472 batch 6.922.500 -> 6.972.500... OK, Fetched: 50.000 (21 sec 664 ms)
18-06-2026 11:02:11.755 batch 6.972.500 -> 7.022.500... OK, Fetched: 50.000 (2 min 43 sec 680 ms)
18-06-2026 11:04:56.058 batch 7.022.500 -> 7.072.500... Error 1: RDW Webservice timeout na 300 seconden.
18-06-2026 11:10:26.334 batch 7.022.500 -> 7.023.000... OK, Fetched: 500 (12 sec 420 ms)
18-06-2026 11:10:38.943 batch 7.023.000 -> 7.023.500... OK, Fetched: 500 (2 sec 297 ms)