Autor Zpráva
KeFyr
Profil
Ahoj,

potýkám se s problémem který jsem nikdy neřešil a proto bych rád poprosil o radu.

Mám JSON soubor, ve kterém mám momentálně přes 150 000 záznamů a každý den mi jich dalších 720 přibývá. Soubor má aktuálně přes 14 MB. Tato data renderuji přes knihovnu apexcharts do grafů. Ovšem potýkám se s rychlostním problémem, vzhledem k velikosti zdrojového souboru typu JSON se graf renderuje i několik minut.

Potřeboval bych tedy poradit, jak ideálně uchovávat takto velké množství dat, které se najednou musí vytáhnout ze souboru či databáze a předat dále javascriptové knihovně která renderuje graf? K dispozici je pouze relační databáze (MariaDB či MySQL). Popřípadě, prosím o Váš názor, jak tuto situaci řešit.

Předem děkuji za Vaše názory a rady.
Keeehi
Profil
KeFyr:
Odeslat 14MB soubor není pro server moc velký problém. Úzké hrdlo bude pravděpodobně v té knihovně. Ono vykreslit 150 000 nebude asi žádná prča. Tak pokud pro to vykreslení grafu potřebuješ všechna data, tak s rychlostí toho moc neudělaš. Úložiště nemá v takovém případě moc cenu řešit, statický JSON soubor je fajn.
Pokud ale počet záznamů můžeš nějak omezit (časový filtr, předzpracování/agregace dat, ...) pak se s tím možná něco dělat dá. Pak bude zřejmě lepší i databáze, která tu práci může obstarat.
KeFyr
Profil
Je pravdou, že pokud vykreslení omezím na poslední dva týdny (tedy 10080 záznamů) je rychlost v řádu jednotek vteřin. Bohužel dva grafy potřebuji vykreslovat celé, zkusím se tedy mrknout po nějaké jiné knihovně, která by toto mohla zvládnout. Pokud by někdo měl nějaký tip, rád se nechám inspirovat (free ke komerčnímu užití i placené řešení).
breeta
Profil
KeFyr:
Zkoušel jsi to renderovat na straně PHP viz, www.fusioncharts.com/php-charts?framework=php

Jinak vytahování dat: omezit jen to nejnutnější, případně hodit do nějaké cache pokud ty data vytahuješ stejné v nějaký interval..., nebo Redis
Kajman
Profil
Pokud se hodnota nemění v čase pokaždé, lze data pro graf zredukovat tak, že se vyhodí hodnoty, kde je předešlý i následující záznam stejný.

Tedy pro data
1 10
2 11 
3 11
4 11
5 12

bude stejný graf i pro data
1 10
2 11 
4 11
5 12

Případně lze do grafů dát za časové období např. minimum, maximum, průměr a detail načíst až po zazoomování.
Keeehi
Profil
Myslím si, že to musí jít nějak zredukovat. Neumím si představit, jaký dataset se dá rozumně vizualizovat kde by bylo najednou vidět 150000 bodů.
NoxOne
Profil
Mrkni sem metricsgraphicsjs.org
načítám tím i více dat do grafů.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0