NatLibFi / Finto-suggestions

Finto-suggestions
7 stars 1 forks source link

API: suggestions [GET] tulee voida asettaa niin, että se palauttaa pyydettäessä vain hakuehtoihin ja rajauksiin sopivien ehdotusten kokonaismäärän #329

Open miguelvaara opened 4 years ago

miguelvaara commented 4 years ago

Esimerkiksi sivutusta frontin puolella rakennettaessa tämänhetkinen toteutus palauttaa kaikki lajitteluun sekä hakuehtoihin ja -rajauksiin liittyvät ehdotukset. Jos halutaan lazy-periaatteen mukaisesti rakentaa mielekäs sivutustoiminto front-endin puolella, täytyy olla mahdollista saada tietää em. hakuehtoihin liittyen vain ehdotusten määrä.

Kun ehdotusten määrä on tiedossa, voidaan tietoon perustuen rakentaa esimerkiksi sivutustoiminnot (ehdotusten määrä, sivujen määrä sekä sivulla näyettävien määrä muuttujina).

Mielekkäämpää on hakea listaussivua vaihdettaessa (esim "seuraava sivu"), aina vain yhdellä sivulla näytettävät ehdotukset kokonaisuudessa kerrallaan.

Tällä hetkellä hakee kaikkien hakutulokseen liittyvien ehdotusten kaikki tiedot. Tällaisen tietomäärän käsittely on,

Front-end tulisi pitää koodimäärältään mahdollisimman pienenä, selkeänä sekä muuten kokonaisuutena kevyenä ja lazy-periaatteella toimivana eli esimerkiksi tarvittavan tilatiedon määrä tulisi minimoida ja nykyinen greedy-toteutus ei tätä mahdollista, vaan aiheuttaa.

Mahdollinen lähestymistapa teknisesti: 1) asetetaan SQLAchemyn modeleissa suggestions oletusarvoisesti lazyksi (https://docs.sqlalchemy.org/en/13/orm/loading_relationships.html) 2) tietokantahaun suorittavassa funktiossa (https://github.com/NatLibFi/Finto-suggestions/blob/master/api/api/logic/suggestions.py ja https://github.com/NatLibFi/Finto-suggestions/blob/master/api/api/logic/common.py) on oltava mahdollisuus valita että halutaanko pyydetyt asiat vain niiden lukumääränä vai sisältöineen (hakunopeus ei merkittävästi parane, jos funktio kuitenkin hakee kaikki tarvittavat ehdotukset kokonaisuudessaan, funktion pitää hakea vain lukumäärä. Viite: https://gist.github.com/hest/8798884)

Lazy-haku mahdollistaa ennen kaikkea frontin puolella selkeyden ja yksinkertaisuuden (pienet hakuajat, ei tilatietoa), mutta parantaa myös vasteaikoja ja nopeutta yleisesti