Closed honzajavorek closed 2 years ago
Jen tak pro info, teď ty employments zaberou 27.3min. Stahování inzerátů v jobs je 23.7min, ale to je řekněme adekvátní. Takže loadování tabulky ze záloh je pomalejší než všechny scrapery na pracovní nabídky :D
Tak teď to (s keší teda, což není úplně fér srovnání), zabralo 0.9 minut místo 27.3 minut. Odškrtávám si první bot.
Zavírám, máme teď https://github.com/honzajavorek/junior.guru/issues/862
Toto je veřejný plán přesunu bota na ML, který slouží mě a @miiila k organizaci práce.
📖 Situace
Scrapery vytváří tabulku employments, která kumuluje stará data ze záloh a měla by být ústředním centrálním mozkem pracovních nabídek. ML (čtení a zapisování) nebo API pro Czechitas (jen čtení) by mělo používat tuto tabulku, scrapery by měly ukládat do této tabulky, apod. V tabulce jsou kanonická historická i současná data, bez ohled na jejich následnou „užitečnost“. Zapisuje se tam, zda byla nabídka vybrána nebo vyhozena. Pokud v tabulce dochází ke změnám, do scraperu backups je potřeba dopsat adaptér, který „migruje“ staré tabulky, tedy vypořádá se se změnami a překlápí stará data do nových struktur.
To, které inzeráty se v daném buildu dostanou na webovky nebo do klubu, by měly řešit jiné tabulky, 1:1 navázané na tuto a vytvořené v každém buildu nově, ad hoc, podle aktuálních podmínek. Robot se podívá do mých Google Sheets, spojí si data s employments tabulkou a vytvoří do jiné splachovací tabulky 1:1 záznamy k inzerátům, které mají být zrovna vyvěšeny.
Ze záloh se do employments načítají data jak z minulých tabulek employments, tak jobs a jobs dropped. Nenačítá se do ní ale nic z aktuálního buildu, je to vždy jen z minulých buildů, z těch záloh. Zároveň jsem vytvořil zvlášť tyhle employments, aby mi dál fungovaly jobs postaru a nemusel jsem měnit vše najednou. Takže je v tom trochu binec. K tomu všemu ten backups scraper jede strašně dlouho a nesmírně to prodlužuje build. Bere teď všechny zálohy, které najde, snad všechny za poslední měsíc.
Prvním naším cílem tedy bude konsolidace, aby se vlastně dalo něco přidat a my se z toho úplně nezbláznili. Už teď je to tak komplikované, že je problém to udržet v hlavě. Až se to vyčistí, můžeme přidat ML, což pak už bude vlastně poměrně snadný úkol.
Jednak bude potřeba nějak sloučit employments a jobs a vyřešit, aby se employments nestahovaly věčnost. Potom máme 🌈 a můžeme přidat učení ML, apod. Pak můžeme ladit, tedy vyhodnocovat palečky z Discordu, nebo do Discordu házet i potenciálně juniorní nabídky (jednoduše, v titulku slovo junior), které ML vyhodnotilo jako že ne a vybraní lidé na nich budou hlasovat a tím hlídat i zahazování správných nabídek.
🚜 Nejkratší cesta k výsledku
Tipy 💡
Tím, že se tabulka kumuluje, mělo by vlastně stačit načíst poslední zálohu, ne posledních 30. Jenže employments mají data o jeden build zpět (jobs a jobs dropped se načítají až zpětně) a taky se může build nějak pokazit. Co mě napadlo? Ve scraperu jít od nejnovějších záloh po nejstarší a hlídat, kolik nových inzerátů se uložilo do tabulky. Když už to jen mlátí prázdnou slámu a vytváří dokola duplicity, zastavit načítání dalších záloh. Problém je, že o tabulce scraper nic neví (SRP) ukládání se děje až v pipelines, konkrétně vsave.py
. Jak scraper během scrapování zjistí, co se děje v databázi a že už nemá pokračovat? Možná by mohl před stažením každé zálohy po vlastní ose mrknout na počet řádků v tabulce employments a srovnat s tím, kolik jich tam je po stažení a když se to už nemění, tak přestat? 😬 Ale je to teda dost náhodný coupling v asynchronním systému, kde data typicky tečou jen jedním směrem...🚫 Koš s body, které jsme objevili, ale teď je dělat nebudeme