Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - Filip Jirsák

Stran: 1 ... 281 282 [283] 284 285 ... 375
4231
Vývoj / Re:Paměťová a výpočetní náročnost JVM vs .NET
« kdy: 19. 09. 2016, 09:33:52 »
Použít slovo paralelizovat není úplně přesné. Instrukce se provádí out-of-order, což znamená že se mohou provádět v jiném pořadí, než po sobě jdou v programu. Například když CPU čeká na nějaká data z paměti, tak může provádět jinou instrukci.
Ano, ale v jednom taktu může procesor provést i několik instrukcí, což bych zjednodušeně nazval paralelizací. Těch optimalizací, které provádějí moderní procesory, je celá řada, a myslím, že v tomhle vlákně nemá smysl je probírat.

4232
Vývoj / Re:Paměťová a výpočetní náročnost JVM vs .NET
« kdy: 19. 09. 2016, 08:16:04 »
Ne, těch 10 ms vůbec nesouvisí s původní diskuzí. K tomuto OT jsme se dostali, když jsem uvedl praktický (a zároveň i hezký) příklad, kdy se ve webové aplikaci může objevit seznam dvojic
Těch 10 ms samozřejmě s původní diskusí souvisí. Protože jste to uváděl jako příklad, kdy úprava aplikace, aby lépe zacházela s procesorovou keší, zrychlí práci aplikace. Vzhledem k tomu, že ta aplikace méně než deset ms čeká na data z DB, může po těch méně než 10 ms provádět libovolné výpočty a nijak ji to nezpomalí. Takže před tou optimalizací vám to asi muselo trvat déle než méně než 10 ms, jinak by ta optimalizace byla zbytečná.

v C# tento seznam může zabrat méně paměti a méně alokací než v Javě - díky uživ. definovaným hodnotovým typům a specializaci generik
Evidentně stále nechápete, že to není záležitost programovacího jazyka, ale toho, jak to programátor napíše.

Jinak když už byste chtěl nějaký kód optimalizovat pro použití CPU cache, měl byste si zaktualizovat informace o tom, jak dnešní CPU fungují – od dob Pentií se to přeci jen trochu posunulo. Dnešní procesory už neprovádějí jednu operaci za druhou, ale snaží se provádění paralelizovat (provádění těch instrukcí, které běží v jednom vlákně – z hlediska programátora je to transparentní a ten paralelní postup musí dát přesně stejný výsledek, jako kdyby se to provádělo klasicky instrukce po instrukci). A mezi ty paralelní operace patří i získávání dat z hlavní paměti – takže to, že se na nějaká data odkazuje referencí, nemusí být pro procesor žádná tragédie. Naopak programátor, který se snaží něco optimalizovat ručně, může učinit kód pro procesor tak nepřehledný, že bude jeho spekulativní provádění kódu k ničemu a dotyčná optimalizace efektivně zpomalí provádění kódu na sériové provádění instrukcí.

4234
Server / Re:Porovnání SQLite vs. MySQL
« kdy: 18. 09. 2016, 19:11:39 »
Zápisy šly jeden po druhém
To je právě u engine, který nepodporuje transakce, dost ošemetné tvrzení. V případě transakcí je „jeden po druhém“ pro všechny možné případy jasně definováno. Ale když tam transakce nemáte, „jeden po druhém“ asi znamená, že to bylo v příslušném programu za sebou – z hlediska databáze to ale může znamenat cokoli. Ono kdyby šlo „jeden po druhém“ zařídit bez transakcí, tak se s transakcemi nikdo nebude obtěžovat…

4235
Server / Re:Tomcat 8+ hosting pro Javu Spring
« kdy: 18. 09. 2016, 17:32:34 »
Akorat dnesni appky stejne ladujou spoustu statickeho obsahu, od Bootstrapu pres obrazky atd., takze proc to vsechno nechat ladovat pres Coyote?
Přes Coyote ne, přes Jetty. A proč? No protože právě HTTP/2 umožňuje ty statické soubory nabídnout dřív, než prohlížeč rozparsuje stránku, takže je prohlížeč bude mít k dispozici dřív a dřív zobrazí kompletní stránku.

Ale ta hlavni informace je jinde - proc pro jednoduchou appku pouzivat Spring atd. kdyz staci jednodussi technologie
JSP bych rozhodně neřadil mezi jednodušší technologie, spíš mezi technologie, na které je dobré zapomenout. A i Spring MVC je na použit jednodušší, než servlety, pokud už Spring znáte. Samozřejmě je možné použít i jiné technologie, ale zrovna na Hibernate a REST aplikaci je pro Spring spousta návodů a není na tom nic složitého.

4236
Server / Re:Porovnání SQLite vs. MySQL
« kdy: 18. 09. 2016, 16:57:55 »
Aplikace pracovala následovně:
V to popisu si protiřečíte. Píšete tam o několika zapisujících operacích, že přístup odjinud byl pouze pro čtení, a pak že tam nebyl konkurenční přístup. Pokud se tam četlo i zapisovalo, nebo se tam provádělo víc operací zápisu, byl tam konkurenční přístup.

Otázka už zde padla. Jakým způsobem používat MySQL správně tak, aby update proběhl a následný select vrátil řetězec 'petr'?
Já bych si podle toho, co zde bylo napsáno, tipnul, že se ta tabulka někdy nabořila (např. nečekaným ukončením databáze), nikdo nikdy ji pak nezkontroloval a zápisy do poškozených částí pak selhávaly.

Používat správně – použít InnoDB nebo jiný transakční engine, kontrolovat, že update proběhl, že byl potvrzen commit. Podle izolace transakcí provádět select v takové transakci, která vidí změny provedené v updatovací transakci. Monitorovat stav databáze a reagovat na případné chyby.

A pokud je to možné, použil bych spíš PostgreSQL, přeci jen je to na rozdíl od MySQL plnohodnotná databáze. Ale chápu, že pokud to má být nějaká aplikace provozovaná na levném webhostingu, je jediná možnost MySQL – platí se za to tím, že nemáte k dispozici spoustu vlastností plnohodnotných databází (i když i do MySQL se takové vlastnosti pomalu doplňují).

4237
Vývoj / Re:Pametova a vypocetni narocnost JVM vs .NET
« kdy: 18. 09. 2016, 16:31:16 »
Co jste s těmi daty dělali, že vám jejich zpracování procesorem trvalo déle než 10 ms?

Nic takového jsem nepsal a ani to nejde odvodit z toho, co jsem psal.
Když čekáte na odpověď z databáze 10 ms, máte 10 ms času procesorového času, kdy může procesor místo čekání provádět ty vaše výpočty. Není žádný důvod to urychlovat pod 10 ms, protože pak stejně bude muset čekat na tu databázi. Takže vám to před optimalizací muselo trvat zřetelně déle, než 10 ms.

4238
Server / Re:Tomcat 8+ hosting pro Javu Spring
« kdy: 18. 09. 2016, 16:25:17 »
Co je tak spatneho na klasickych servletech, JSP a web.xml s TC6 (napriklad) nebo Jetty schovanym za httpd?
Na Jetty schovaným za Httpd je špatně ten Apache, který je tam k ničemu a ještě degraduje schopnosti Jetty, např. HTTP/2.

4239
Server / Re:Porovnání SQLite vs. MySQL
« kdy: 18. 09. 2016, 16:21:01 »
Zaráží mě ale, že v té databázi je komponenta, u které se nelze spolehnout, že se provede update.
Takováhle komponenta je v každé databázi. Proto se musí kontrolovat návratové hodnoty, proto se používají transakce a proto se musí kontrolovat, zda databáze potvrdila commit. Pokud někdo použije MyISAM a neví proč, pokud někdo nepoužívá transakce, protože neví, co to je, neměl by psát databázové aplikace.

4240
Vývoj / Re:Pametova a vypocetni narocnost JVM vs .NET
« kdy: 18. 09. 2016, 13:28:57 »
Když dojde k normálnímu ukončení, tak aplikace dostane zprávu předem - tj. data může uložit.
A když dojde k nenormálnímu ukončení, tak o ta data přijdeme.

Neuložení dat však příliš nevadí - při nejhorším nějakým uživatelům ukážeme nějaké produkty vícekrát, než chceme.
Asi nebudete ta data pro tisíce uživatelů držet trvale v paměti, ostatně někdy bude potřeba tu aplikaci restartovat. Takže je stejně nějak ukládat musíte. Pak je ale mnohem jednodušší ukládat je průběžně a počítat s uloženými daty, než je kešovat na straně webového serveru a řešit invalidaci keše a ukládání atd.

Nemusí být pravda - zvláště na sdíleném hostingu, kde je databáze vytížená. Krom toho, když neposíláte do databáze vše ihned, nějaký provoz po síti ušetříte.
Když je databáze vytížená, rozhodně jí nepomůžete tím, že jí budete nutit číst z disku zbytečná data a odesílat je po síti.

Máme to takto implementované a odpověď z databáze trvá méně než 10 ms (tj. nemůžeme ušetřit desítky nebo stovky ms).
Co jste s těmi daty dělali, že vám jejich zpracování procesorem trvalo déle než 10 ms?

4241
Server / Re:Porovnání SQLite vs. MySQL
« kdy: 18. 09. 2016, 13:21:05 »
Aha. Tohle je ovšem nahrávka na smeč. Jinými slovy říkáte, že v MySQL není atomární a zaručený ani primitivní update, že té databázi pro to chybí některé vlastnosti.
MySQL umožňuje používat různé databázové enginy – např. MyISAM transakce nepodporuje, InnoDB je podporuje. Nevidím jediný důvod pro použití MyISAM.

4242
Server / Re:Porovnání SQLite vs. MySQL
« kdy: 18. 09. 2016, 13:01:01 »
Způsobila to nepodporovaná a nepoužitá vlastnost.
Způsobila to absence té vlastnosti.

4243
Server / Re:Porovnání SQLite vs. MySQL
« kdy: 18. 09. 2016, 12:13:47 »
Myisam transakce nepodporuje.
Což je nejpravděpodobnější příčina toho, proč se vám to chovalo divně.

4244
Server / Re:Porovnání SQLite vs. MySQL
« kdy: 18. 09. 2016, 11:22:36 »
Proč se tady pořád řeší transakce?
Protože transakce jsou způsob, jak zajistit bezpečné uložení dat. To, že ta aplikace „nepoužívala transakce“ je tedy nejpravděpodobnější příčina toho, proč se vám to chovalo divně.

4245
Server / Re:Porovnání SQLite vs. MySQL
« kdy: 18. 09. 2016, 10:36:02 »
Jen by mě nenapadlo hledat tyto problémy v aplikaci, kde byly použité dohromady čtyři primitivní SQL příkazy a žádné transakce.
Já bych naopak přesně v takovéhle aplikaci ty problémy hledal. Protože „žádné transakce“ přesně znamená „často se ta data uloží, ale nevíme proč“, z čehož právě plyne „a někdy se také neuloží, a nevíme proč“.

Stran: 1 ... 281 282 [283] 284 285 ... 375