Skip to content
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

limit počtu semínek #636

Open
zlodejpapiru opened this issue Nov 9, 2022 · 11 comments
Open

limit počtu semínek #636

zlodejpapiru opened this issue Nov 9, 2022 · 11 comments
Assignees
Milestone

Comments

@zlodejpapiru
Copy link

zlodejpapiru commented Nov 9, 2022

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?

@mariehaskovcova mariehaskovcova added this to the 1.0.7 milestone Nov 21, 2022
@Fasand
Copy link
Contributor

Fasand commented Dec 9, 2022

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

@zlodejpapiru
Copy link
Author

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

@Fasand
Copy link
Contributor

Fasand commented Dec 10, 2022

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.

@zlodejpapiru
Copy link
Author

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
Copy link
Author

Jak to dopadlo? :)

@mariehaskovcova
Copy link
Contributor

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)

@Fasand
Copy link
Contributor

Fasand commented Jul 4, 2023

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 added a commit that referenced this issue Jul 24, 2023
…ay in an HTML field if too large, back up before overwriting, some optimizing
Fasand added a commit that referenced this issue Jul 24, 2023
Fasand added a commit that referenced this issue Jul 24, 2023
…ay in an HTML field if too large, back up before overwriting, some optimizing
Fasand added a commit that referenced this issue Jul 24, 2023
@Fasand
Copy link
Contributor

Fasand commented Jul 24, 2023

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?

@zlodejpapiru
Copy link
Author

@westfood ?

@dragounv
Copy link
Contributor

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.

@Fasand
Copy link
Contributor

Fasand commented Aug 11, 2023

@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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants