-
Notifications
You must be signed in to change notification settings - Fork 27
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Als leverancier wil ik niet een exact totaal aantal resultaten hoeven te berekenen #2284
Comments
We zouden een gelijknamige query parameter kunnen toevoegen aan de GET-operatie. Bijvoorbeeld,
zodat de consumer zelf kan aangeven of die wel of niet met een exacte count wil werken. Op deze manier is de nieuwe feature alleen een (mogelijke) breaking change voor die applicaties die er echt gebruik van willen maken. De default is |
Is dit getal (500) volledig random? Of zijn er tips en trucs om een goede schatting te geven. Google lijkt namelijk een (realistische) schatting van het aantal resultaten te geven. |
Lijkt me prima idee. Performance metingen ga ik dan wel met
Ik had zelf 10x de paginagrootte (10x50) in gedachten zodat je eventueel 1 t/m 10 als pagina navigatie kan opnemen.
Je zou iets met caching kunnen doen, maar dat gaat al niet meer werken als je filters opgeeft of met permissies zit.
Valt tegen vind ik. Je kan nooit controleren of die schatting uberhaupt ergens op slaat. Daarnaast zijn wij ook geen Google hehe. Bij Gmail zie je dat ze niet eens een schatting geven zodra je filtert: Terwijl er maar 53 zijn hehe: |
In de OAS van de Zaken API heb ik deze feature alvast uitgewerkt voor de operatie |
Ik neem aan dat we deze nieuwe feature ook willen toevoegen aan de andere ZGW API's? |
Wellicht kunnen we de attributen De NL API Strategie zegt er ook over:
Bron: https://docs.geostandaarden.nl/api/API-Strategie-ext/#pagination Over NL API Strategie gesproken, ik heb dit onderwerp ook nog maar eens opgegooid aldaar: Geonovum/KP-APIs#605 |
Zie ook #2140 |
PR #2484 opgestart voor het oplossen van dit issue. |
...zodat de performance van een list-endpoint acceptabel blijft.
Bij recente performance tests van Open Zaak blijkt dat met een miljoen zaken en documenten, de performance een flinke knauw krijgt door het berekenen van het totaal aantal resultaten in een lijst-weergave. Het gaat om
count
in de metadata van de resultaten bij elke gepagineerde list-endpointHet berekenen van deze
count
duurt nog veel langer als je rekening houdt met allerlei autorisaties binnen de resultaten.Om deze reden willen we de
count
benaderen of maximeren, zodat niet het exacte totaal hoeft te worden berekend. We stellen daarom voor om een extra attribuut toe te voegencountExact
:Het gedrag kan dan zijn:
count
voor de eerste pagina op 500.countExact
opfalse
count
van 500 (resultaten 1-50)count
met het aantal resultaten van de vorige pagina's (50).Pagina 2 heeft dus een
count
van 550 encountExact
blijftfalse
count
van 556 (de max) encountExact
staat dan weer optrue
Op deze manier weet een client altijd dat de 500 die hij zag op pagina 1, niet het exacte totaal hoeft te zijn. Maar, als de client door de pagina's heen bladert, dan komt hij op een gegeven moment wel het exacte aantal tegen.
Achtergrond bij redenatie
Voor echte mensen, is dit geen probleem. Wie gaat er ooit naar Google pagina 2 of 3? De kans is klein dat een mens wil zien dat er meer dan 10 pagina's zijn. Maar, stel je toont op in een applicatie de paginering:
[ 1 2 3 4 5 6 7 8 9 10 ]
en iemand klikt op pagina 10, dan wordt decount
uit de API dus groter en zou je pagina 10 t/m 20 ook navigeerbaar kunnen maken.Voor automatische clients, die echt alle pagina's willen doorlopen, werkt dit patroon ook MITS ze niet aan het begin van de for-loop bepalen hoeveel pagina's ze moeten doorlopen. Ze moeten rekening houden met de
countExact
of via een while-loop alles doorlopen.Naar onze mening is dit "redelijk" backwards compatible, maar de MITS hierboven geeft al aan dat het niet 100% is.
The text was updated successfully, but these errors were encountered: