Seeder
Seeder copied to clipboard
limit počtu semínek
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?
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
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.
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.
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.
Jak to dopadlo? :)
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)
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.
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.
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?
@westfood ?
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 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:
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