Seeder icon indicating copy to clipboard operation
Seeder copied to clipboard

limit počtu semínek

Open zlodejpapiru opened this issue 2 years ago • 11 comments

Jaký je limit počtu semínek vložených do mimosystémových semínek v interních kolekcích? Je limitována také velikost přílohy?

zlodejpapiru avatar Nov 09 '22 13:11 zlodejpapiru

Mimosystémová semínka v interních kolekcích a sklizních jsou Django TextField, jsou tedy limitovány jen PostgreSQL max velikostí "text", což je 1GB. Semínka jsou uložena jako plaintext, kde každá URL je oddělena novým řádkem, takže kdyby třeba průměrná URL měla 50 znaků (tedy ~50 bytes), tak se tam vejde ~20 milionů semínek.

Co se týče velikosti příloh, z experimentace na app.webarchiv to vypadá, že je maximální velikost přílohy 8 MB (celkově vybraných souborů). Bohužel jsem nenašel místo, kde by to bylo definováno, takže vlastně zatím nevím, proč ten limit není menší. Django pustí jakoukoliv velikost souboru a Nginx má výchozí limit 1 MB, který aspoň co jsem hledal není nikde předefinovaný. Pokud bychom to chtěli definovat napevno, mělo by stačit přidat např. client_max_body_size 10M; do výchozího nginx.conf

Fasand avatar Dec 09 '22 09:12 Fasand

V případě, že zkouším nahrát 1,4M mimosystémových semínek mi to při ukládání háže chybu. Ad screenshoty. Snímek obrazovky 2022-12-09 v 14 00 16 Snímek obrazovky 2022-12-09 v 13 57 37

zlodejpapiru avatar Dec 09 '22 13:12 zlodejpapiru

No vidíš, to mi nedošlo, že při nahrávání semínek přes formulář bude velmi podobný limit, takže se to k tomu databázovému ani nepřiblíží. 1.4M semínek bych odhadl na 30-80MB. Na co tedy myslíš, že by dávalo smysl to nastavit?

Pod Djangem v podstatě nebude potřeba nastavit nic, jenom možná DATA_UPLOAD_MAX_MEMORY_SIZE kvůli POST datům a pak pod nginx client_max_body_size na max velikost POST dat + příloh. Jen tedy podstatná poznámka – ten vyšší limit pak bude platit na všechny formuláře a velká data se ukládají do /tmp/ na disk, tedy když dáme limit na 100MB a naráz dorazí 100 takových requestů (DoS), máme 10GB problém.

Fasand avatar Dec 10 '22 08:12 Fasand

Soubor se semínky měl cca. 40MB. Zkus tedy nastavit na 50?

Co znamená, že bude platit na všechny formuláře? Žádoucí je jen pole "mimosystémová semínka" v interních tematických sklizních a případně "semínka" při vytváření sklizně (Tam se ale dá vložit přímo ta interní kolekce - není to tedy asi nutné.)

Lze vytvořit nějaké bezpečnostní opatření? Aby nás někdo nezahltil?

Vložení takového množství semínek je pro nás spíš mimořádná akce.

zlodejpapiru avatar Dec 12 '22 13:12 zlodejpapiru

Jak to dopadlo? :)

zlodejpapiru avatar Feb 15 '23 11:02 zlodejpapiru

po dnešní schůzce připojuju požadavek na export všech semínek v Seederu (app.webarchiv.cz/seeder/source/list), funkce tam je, ale export neproběhne (504 Gateway Time-out)

mariehaskovcova avatar Apr 06 '23 14:04 mariehaskovcova

po dnešní schůzce připojuju požadavek na export všech semínek v Seederu (app.webarchiv.cz/seeder/source/list), funkce tam je, ale export neproběhne (504 Gateway Time-out)

Přidal jsem export přes Pandas do Excelu na tlačítko pod exportem. Data jsou podobná jako v tabulce, jen sloupce mají názvy databázových polí a např. status má databázové hodnoty místo těch přeložených. image Zatím dávám takhle nástřel, dá se s tím ještě libovolně pracovat (přidat sloupečky, asi i ty přeložené popisky, ...) a hlavně ten export trvá pár sekund. Ten výchozí django-tables2 export jsem zkoušel nějak rozjet, ale podle mě tam je moc velký overhead čtení z databáze, převádění hodnot neoptimalizovanými způsoby atd, takže je to schopné vyexportovat pár desítek-stovek řádků, ale 10000 už je moc.

@zlodejpapiru co se týče toho uploadu velkého množství semínek – chceš to tedy vyřešit nějak obecně, aby se to dalo aplikovat pravidelně nebo nyní stačí nahrát kvanta semínek k jednomu zdroji manuálně? Už mám přístup přes SSH na test i produkci, takže by neměl být problém hodit semínka do texťáku a z toho to tam přes Django shell manuálně nahrát.

Fasand avatar Jul 04 '23 09:07 Fasand

Přidal jsem možnost nahrání TXT souboru, který přepíše (po záloze) všechna custom semínka, ale nějak stále nefunguje ten upload limit na nginxu, hlásí "413 Request Entity Too Large". Už jsem zkoušel manuálně přidat client_max_body_size do default.conf v kontejneru i do výchozího nginx.conf, ale hlásí to HTTP 413 i s 13MB souborem, i když by měl být limit nějakých 50MB.

Nenapadá někoho, čím by to mohlo být? Nebrzdí to tam třeba ještě Traefik nebo něco takového?

Fasand avatar Jul 24 '23 14:07 Fasand

@westfood ?

zlodejpapiru avatar Jul 26 '23 11:07 zlodejpapiru

Přidal jsem možnost nahrání TXT souboru, který přepíše (po záloze) všechna custom semínka, ale nějak stále nefunguje ten upload limit na nginxu, hlásí "413 Request Entity Too Large". Už jsem zkoušel manuálně přidat client_max_body_size do default.conf v kontejneru i do výchozího nginx.conf, ale hlásí to HTTP 413 i s 13MB souborem, i když by měl být limit nějakých 50MB.

Nenapadá někoho, čím by to mohlo být? Nebrzdí to tam třeba ještě Traefik nebo něco takového?

Ta nginx konfigurace v seederu je pro staické obrázky. Musí se to nastavit na naší reverzní proxy, která běží na jiném serveru. Chtělo by to se domluvit, ať to můžeš rovnou otestovat až to změním. Nemůžu to měnit moc často, protože to musím restartovat aby se načetla nová konfigurace a nefungujou nám při tom žádné aplikace včetně seederu, což ruší ostatní při práci. Napiš mi mail, nebo na messenger kdy máš čas a nějak se skoordinujem.

dragounv avatar Jul 26 '23 14:07 dragounv

@dragounv díky za nastavení na app.webarchiv.cz, otestoval jsem a vypadá to, že to už jede. Limit je teda cca 50MB.

Když se soubor nahraje, nahradí se jeho obsahem všechna mimosystémová semínka kolekce a ta původní se uloží do texťáku, na který vyskočí link a je uložený v media složce. Stáhnout ten 40MB soubor původních semínek mi nedělalo problém, ale načíst seznam aktuálních semínek, kde jsou nějaké operace navíc a generuje se to přes jednoduchý Django template už trvá dýl a spadne to na úrovni prohlížeče: image

Každopádě ve sklizni přes JSON se semínka načtou a jdou stáhnout: https://app.webarchiv.cz/seeder/harvests/171/json

Fasand avatar Aug 11 '23 09:08 Fasand