IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Web API stahování souboru s mnoha údaji

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
radomil.holec:25.7.2020 13:52

Ahoj, měl bych dotaz.

Potřebuji z databáze vyčíst poměrně dost hodnot dle zadaného časového rozsahu. Pro úplnost. Může být až 10 milionů řádků s hodnotami.

Aplikace je postavena na komunikaci za pomoci REST. Tj. data jsou na serveru a klient se pouze na ně dotazuje. Klient má dostat již zpracovaná data.

Zkusil jsem: Zkoušel jsem to vyřešit tak, že bych se dotázal za pomoci GET a funkce na serveru by mi vrátila všechny hodnoty. Což se ale ukázalo téměř nemožné.

Dále mě napadlo, vyčítat jednu hodnotu po druhé. Znovu za pomoci GET funkce na serveru. Ovšem tato možnost se mi zdá poměrně zatěžující pro síť.

Chci docílit: Jako poslední mě napadlo, dotázat se serveru na údaje, ten by je vygeneroval do nějakého souboru a vrátil by adresu kde se soubor nachází. A já bych si ho následně stáhl.
Můj dotaz zní, je tato varianta ideální, nebo byste tento problém řešili jinak ?
Zároveň jak řešit bezpečnost aby se k souboru nedostal někdo kdo náhodou zkoušel zadávat nějaké adresy (napadlo mě ho po stáhnutí smazat) ?

 
Odpovědět
25.7.2020 13:52
Avatar
zelvicek
Člen
Avatar
zelvicek:27.7.2020 6:41

Mohl bys upřesnit "Což se ale ukázalo téměř nemožné."? Proč nemožné a proč téměř?

Dále píšeš "A já bych si ho následně stáhl." znamená to, že daný objem dat lze přenést? Jaký je rozdíl při přenosu dat, kdy zdrojem je soubor nebo jiný?

 
Nahoru Odpovědět
27.7.2020 6:41
Avatar
Jan Stodůlka
Tvůrce
Avatar
Jan Stodůlka:27.7.2020 9:09

Když to přeneseš přes REST API nebo souborem je myslím jedno, protože oboje jde přes síť.
Zhodnoť zda data potřebuješ najednou a jak často to chceš stahovat. Jestli by ti pro zpracování nestačilo přenášet data po 100 000 každých 5x minut. Tak by se ti to postupně celé načetlo.
Dále zda nemůžeš něco na serveru předpočítat aby jsi mohl přenést méně dat.
Ještě můžeš data zkomprimovat - nepoužívat xml, použít vlastní formát bez "značek". Případně data zazipovat.

Když by jsi napsal více podrobností o použítí dat, tak můžeme vymyslet něco více.

Nahoru Odpovědět
27.7.2020 9:09
Nechodím do hospody, protože doma programuji.
Avatar
Odpovídá na radomil.holec
Michal Štěpánek:27.7.2020 13:18

Můžeš uvést nějakou situaci, kde by bylo potřeba najednou 10mio záznamů? I tisíc je hodně na to, aby se tím někdo prokousával...

Nahoru Odpovědět
27.7.2020 13:18
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na zelvicek
radomil.holec:28.7.2020 14:42

Problém je v tom že data posílám ve formátu JSON a následně je v aplikaci za pomocí JavaScriptSeri­alizer deserializuji. Avšak při větším množství dat, tento deserializer hodil Exception že dat je již mnoho.

Nyní to mám vyřešené takto a funguje to docela spolehlivě. Na server pošlu žádost o vygenerování souboru, zpět se mi vrátí ticket, se kterým mohu zjišťovat, zda již generování soboru doběhlo (přeci jen vyčíst takové množství dat dost zdlouhavá operace). Jestliže již doběhlo, soubor prostě jednoduše stáhnu a předám uživateli.

 
Nahoru Odpovědět
28.7.2020 14:42
Avatar
Odpovídá na Jan Stodůlka
radomil.holec:28.7.2020 14:51

Ano nakonec jsem to vymyslel tak, jak jsem odpovídal na zelvicek
Na serveru si vše předpřipravím a jakmile je soubor vygenerovaný, prostě ho jenom stáhnu. Rychlost se pak už odvíjí jen od rychlosti sítě, což u nás ve fimě není problém.

 
Nahoru Odpovědět
28.7.2020 14:51
Avatar
Odpovídá na Michal Štěpánek
radomil.holec:28.7.2020 14:56

To je jednoduché. Tato aplikace bude sloužit k vyčítání archivu s hodnotami sklářských feederů. Z těchno feederů je zapotřebí vyčítat tyto hodnoty: teplota, setpoint, proud, napětí, příkon, odpor každých 30s

Zároveň každý feeder může mít až 10 zón. Tj: 28 800 zápisů/den; 10 512 000 zápisů/rok

Dále zde jsou různá data o odběrech elektřiny, odběrech skloviny, chybové stavy, další měření, apod... Ve finále se může jednat i o stovky až tisíce údajů, které je za potřebí ukládat a přenášet.

Naše technologové si žádájí aby bylo možné vytáhnout zpětně veškeré parametry v naprosto variabilním časovém úseku. Takže musím bohužel počítat i s variantou celého roku. Co a proč to potřebují ? Netuším, ale to není již moje starost.

 
Nahoru Odpovědět
28.7.2020 14:56
Avatar
zelvicek
Člen
Avatar
Odpovídá na radomil.holec
zelvicek:28.7.2020 15:08

Takže problém není v posílání dat, jak jsi uvedl původně, ale v deserializaci.

Problém s přetečením (čehokoliv) při deserializaci je klasika. Přitom musí být každému jasné, že do RAM nemůže narvat neomezené množství dat - zejména pokud IIS admin omezí RAM na poolu. Zde bych doporučil místo JavaScriptSeri­alizer použít https://docs.microsoft.com/…f8jsonreader?… (nebo jiný vhodný - např.:Newtonsoft). Použití XXXReaderu se může zdát složitější, ale pokud si nad tím uděláš pár obecných zjednodušujících method, není to tak strašné. A hlavně budeš pánem nad procesem deserializace (read+materialize).

A třešnička na dortu může být implementace IEnumerator<> či IAsyncEnumerator<> nad readerem.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
28.7.2020 15:08
Avatar
Odpovídá na radomil.holec
Michal Štěpánek:28.7.2020 15:09

Trošku nechápu smysl toho, aby měli ta data všechna, protože ručně se v tom stejně nikdo hrabat nebude. Chápal bych třeba nejnižší hodnoty, nejvyšší, různé průměry za období, ale toto?
Ale pokud ti to takto funguje, tak OK

Nahoru Odpovědět
28.7.2020 15:09
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
radomil.holec:28.7.2020 17:00

Ano, bohužel oni si tyto data poté vloží do Excelu a následně si s nimi dělají co potřebují. Jak jsem psal, doopravdy netuším co s tím následně dělají. :-D

 
Nahoru Odpovědět
28.7.2020 17:00
Avatar
Odpovídá na radomil.holec
Michal Štěpánek:29.7.2020 10:49

Tak to je upřímně lituji, pracovat v excelu s takovým množstvím dat...

Nahoru Odpovědět
29.7.2020 10:49
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.