Zadejte hledaný výraz...

Technologie pro real-time aplikaci

Ahoj všem,
potřeboval bych poradit s výběrem vhodné technologie pro real-time aplikaci. Problémem je, že v rámci jednoho pohledu v aplikaci může být zobrazeno tisíce záznamů (mimo jiné také geografické data), které je potřeba zobrazovat, real-time aktualizovat a zapisovat do map.
Zkoušel jsem základy postavit na Meteoru, nicméně jsem se setkal s problémem -> již při několika stovkách záznamů se mi začala celá aplikace neskutečně trhat a padat (zamrzávala).
Je možné, že byla chyba u mne, nicméně mě to přimělo k tomu, abych zde napsal a poradil se s vámi, jakou technologii použít. Máte někdo zkušenosti?
Shrnutí: Realtimová aplikace s velkou spoustou dat
Děkuji předem
10. 5. 2016 14:30:50
https://webtrh.cz/diskuse/technologie-pro-real-time-aplikaci/#reply1195018
node
verified
rating uzivatele
(5 hodnocení)
10. 5. 2016 14:49:20
Na front-end bud angular2 alebo react. Na backend NodeJS alebo python(alebo php7), na data mozno mongo, pripadne aj redis.
10. 5. 2016 14:49:20
https://webtrh.cz/diskuse/technologie-pro-real-time-aplikaci/#reply1195017
Jan Stejskal
verified
rating uzivatele
(7 hodnocení)
10. 5. 2016 14:50:34
Vůbec nepíšete, pro koho/co je aplikace určena (zařízení, os, atd.). Podle zmínky o Meteoru předpokládám, že se má jednat o klientskou webovou aplikaci. Javascript je pomalý a pro zpracování velkého množství dat nevhodný. Navíc použitím jakéhokoliv javascript frameworku či api si vše zpomalíte. Začal bych tedy spíš u samotného návrhu aplikace (například proč je potřeba vykreslovat stovky, tisíce nějakých záznamů současně? to je uživatel nadčlověk, že umí sledovat tisíce údajů současně?).
10. 5. 2016 14:50:34
https://webtrh.cz/diskuse/technologie-pro-real-time-aplikaci/#reply1195016
Ano, jde o klientskou aplikaci.
Jde o to, že data na mapách mají souvislost a až spojení všech těchto dat dá dohromady celek, který je pro uživatele pochopitelný.
Je možné si představit podobnou funkčnost: jako byste chtěl na mapu zaznačit cestu, která vede napříč celou Evropou a vzorkoval byste ji po desítkách metrů.
Aplikace musí být webová.
Chápeme se?
Děkuji
10. 5. 2016 15:03:43
https://webtrh.cz/diskuse/technologie-pro-real-time-aplikaci/#reply1195015
TomasX
verified
rating uzivatele
(4 hodnocení)
10. 5. 2016 15:24:30
v tomhle tě žádný framework nezachrání. JS nemá problém filtrovat a zpracovávat miliony záznamů v prohlížeči aniž by uživatel cokoliv pocítil (jedna z mnoha ukázek).
Problém ale je zobrazit milion položek, DOM (html) nezvládne a musíš položky nějak sdružit. Ono stejně lidské oko nedokáže milion bodů vidět a stejně mu splývají dohromady.
Pokud na mapách chceš zobrazovat velké množství dat, musíš buď vektorizovat (jedná-li se o path) či mergovat (sdružovat pokud jde o body). Na čem to zobrazuješ? Kolik dat máš na mysli? Co má být výsledkem, resp. cože to vůbec chceš zobrazovat. Zeptal jsi se stylem, že potřebuješ zrychlit auto a že nevíš jak na tom, pokud jsi řidič, tak sám víš, že na takhle obecnou otázku nelze dát konkrétní odpověď.
Pokud pracuješ s opravdu velkým množstvím záznamů, nesmíš použít žádný framework, ale samotná data si zpracovávat v čistém JS, či pouze v nějakém funkcionálním frameworku. Zobrazování je v prohlížečích lepší nechat na svg, lépe škáluje nebo použít jednoduchý on-way framework, defacto jenom nějaký templatovací, jakmile tam hodíš two-way binding (react, meteor, knockout, angular atd. atd.), umře ti to.
10. 5. 2016 15:24:30
https://webtrh.cz/diskuse/technologie-pro-real-time-aplikaci/#reply1195014
indy.cz
verified
rating uzivatele
10. 5. 2016 15:28:08
Čistý js bez frameworku, data tahat jako metadata v grafických objektech a uváženě SVG. Serverová část v C, C++
10. 5. 2016 15:28:08
https://webtrh.cz/diskuse/technologie-pro-real-time-aplikaci/#reply1195013
Mám zařízení, které sbírají různé parametry z různých strojů, mimo jiné také z nákladních aut firmy. Tyto automobily jezdí po celém světě a do paměťového media se ukládají parametry, které dané zařízení sesbíra.
Jakmile je auto u mne, vytáhnu si data a uložím je na server spolu s polohou, kde byla získána.
Na mapě pote potřebují vidět všechny tyto parametry v závislosti na geografické poloze, kde byla data získána.
Již teď mám u jednoho zařízení více, než 10tisíc takových záznamů. Samozřejmě nepotřebují zobrazit najednou všech 10tisíc, ale některé data z každého záznamu (stav, signál, pozice) se musí propsat každý do mapy.
Je to srozumitelné?
Děkuji:)
---------- Příspěvek doplněn 10.05.2016 v 16:33 ----------
Jak to vidím .. co člověk, to názor .. domluvíme se na něčem společně?
Díky
10. 5. 2016 15:33:53
https://webtrh.cz/diskuse/technologie-pro-real-time-aplikaci/#reply1195012
JosefKerner
verified
rating uzivatele
10. 5. 2016 17:30:17
Zdravím,
pokud za to nechcete utratit nehorázné peníze, tak bych doporučil využit následující backend stack, běžící v clusteru(paralelizované servery):
Databáze Cassandra - NoSQL databáze, velmi rychlá
Framework Spark + Scala - Zpracování dat, výpočty nad daty
Amazon EMR nebo WS - technologická infrastruktura platformy Hadoop v Cloudu pro Spark
U toho frontendu úplně nevím, ale opravdu není možné ty body nějak agregovat na serveru, kdy například s přiblížením se mapa překreslí podle dat, které načetl server?
Více info o propojení Cassandry a Sparku: https://academy.datastax.com/resources/getting-started-apache-spark-and-cassandra?unit=2217#spark-and-cassandra
S frameworkem Spark mám již zkušenosti a funguje to na jedničku a za velmi nízké náklady (desítky až stovky dolarů měsíčně max).
10. 5. 2016 17:30:17
https://webtrh.cz/diskuse/technologie-pro-real-time-aplikaci/#reply1195011
TomasX
verified
rating uzivatele
(4 hodnocení)
10. 5. 2016 17:46:07
indy.cz: je naprosto zbytečné psát backend v c/c++, nic s tím nezískáš, php, node.js, python, java bohatě stačí.
Josef Kerner 1: Připadá ti, že tazatel je schopný používat tyhle frameworky? Nasazovat na tohle cassandru? Proboha, vždyť jí chybí lepší možnosti filtrace, streaming dat a napojení na spark je u ledu oproti spolupráci s hdfs. Rozhodně nedoporučuji jít touhle cestou, náklady na provoz, údržbu a naučení u těhle databází jsou obrovské a to jen kvůi tomu abych tam uložil pár milionů záznamů...
Dokud budeš mít desítky až stovky milionů údajů, klidně to měj v mysql nebo použíj mongo, možná přesně na tohle je dělané. Zbytečně si nepřidělávej problémy s použitím databází a technologií, které neznáš.
Jasně, teď už je srozumitelnější co chceš dělat. Pár rad:
- jdi od vrchu, nejprve si sepiš jak ty data chceš zobrazovat, kolik jich chceš zobrazovat a jak to má vypadat, poté si udělej vrstvu (funkci), která ti ze surových dat vytáhne pouze co potřebuješ ve formátu, který potřebuješ (místo 10 tis bodů pro trasu, stačí mít jednu občas lomenou čáru)
- co nejvíce věcí počítej na backendu, ideálně v mysql a klidně ve spojení s php (ty technologie to zvládnou a aspoň na to seženeš dostatek lidí), přenášet velké množství dat na klienta je drahé, server má více výkonu a hlavně se to lépe ladí a škáluje
- pokud nějaký výpočet bude pomalý, rovnou cachuji, buď někam do souboru nebo mnohem vhodněji do redis s nějakým ttl (cache se sama po nějaké době smaže)
- často se podobné věci řeší postupnou agregací dat, např. dnešní data budu počítat a tahat surová, ale včerejší (či loňská) již sečtena a vypočtne, taková forma cache
10. 5. 2016 17:46:07
https://webtrh.cz/diskuse/technologie-pro-real-time-aplikaci/#reply1195010
Jan Stejskal
verified
rating uzivatele
(7 hodnocení)
10. 5. 2016 17:57:27
Napsal kokossak;1290917
Samozřejmě nepotřebují zobrazit najednou všech 10tisíc, ale některé data z každého záznamu (stav, signál, pozice) se musí propsat každý do mapy.
Na klientovi pravděpodobně nepotřebujete držet žádná jiná data než polohu. A i tu jen v závislosti na přiblížení mapy, tzn. nikdy tam nebudou tisíce bodů. Veškerá ostatní data lze tahat až na základě požadavku (data k jednotlivým polohám), ostatní data předpočítaná. Předpočítaná data si ukládat do db, aby se nemusela počítat pokaždé znovu.
Z níže uvedených technologií nepotřebujete ani jednu.
10. 5. 2016 17:57:27
https://webtrh.cz/diskuse/technologie-pro-real-time-aplikaci/#reply1195009
Rozumím, děkuji za rady.
Z výše uvedeného jsem tedy porozumněl: využít na backendu PHPko či Node, na frontend bude stačit javascript, je to tak?
Mohu nebo nemohu tedy využít nějaký framework? Případně co byste doporučili?
Děkuji za vaše rady, vážím si toho.
---------- Příspěvek doplněn 10.05.2016 v 20:18 ----------
Napsal Jan Stejskal;1290979
Na klientovi pravděpodobně nepotřebujete držet žádná jiná data než polohu. A i tu jen v závislosti na přiblížení mapy, tzn. nikdy tam nebudou tisíce bodů. Veškerá ostatní data lze tahat až na základě požadavku (data k jednotlivým polohám), ostatní data předpočítaná. Předpočítaná data si ukládat do db, aby se nemusela počítat pokaždé znovu.
Z níže uvedených technologií nepotřebujete ani jednu.
I jiné parametry (zmíněné) ovlivňují typ výpisu na mapě, není to tedy jen poloha, ale i jiné.
Díky
---------- Příspěvek doplněn 10.05.2016 v 20:20 ----------
A ještě doplnění: pokud bude na serveru PHPko, jak mám řešit real-time?
Děkuji
10. 5. 2016 20:16:28
https://webtrh.cz/diskuse/technologie-pro-real-time-aplikaci/#reply1195008
Jiří Šubr
verified
rating uzivatele
(23 hodnocení)
10. 5. 2016 20:43:34
...
10. 5. 2016 20:43:34
https://webtrh.cz/diskuse/technologie-pro-real-time-aplikaci/#reply1195007
Dobře, pokusím se to popsat ještě jednou a lépe.
Mám několik zařízení, které mi sbírají data. Sbírají nějaké data, které jsou důležité pro chod firmy (bohužel zde nemohu napsat jaké, ale pro příklad ty obecné = poloha, kde je daná mašina, časy, stav mašiny, vytížení aj.). Některá data jsou posílána skrz GSM přímo na server, který data zpracuje, očistí a uloží do Mongo databáze. Tohle je pro mne výchozí stav, který nemohu změnit = mám Mongo databázi naplněnou daty.
Některé stroje však nejsou vybaveny GSM a proto od nich manuálně odebírám data, která poté připisuji také do této databáze.
Aplikace, která se musí vybudovat bude pracovat s daty v této databázi. Vyhodnocování, grafy, reporty ap. nejsou předmětem této diskuse = nejsou výkonově náročné a celá řada výpočtů probíhá jinde.
Otázka však je, jak vypisovat velký počet dat z databáze do map a vykreslovat je. Mapa samozřejmě nemusí obsahovat vše najednou, nicméně některá data (pozice, stav mašiny a nějaká hodnota z vytížení) musí být na mapě vždy propsána také, protože ovlivňuje typ výpisu.
Jelikož mašiny pracují poměrně často a potřebuji vidět data aktuální, potřebuji aby aplikace byla real-time a abych tedy v reálném čase viděl veškeré pohyby, změny parametrů a vlastností (a zkrátka veškerá změněná data v databázi).
Je to takhle pochopitelné? Jakékoliv další věci rád dovysvětlím.
Děkuji.
10. 5. 2016 20:53:04
https://webtrh.cz/diskuse/technologie-pro-real-time-aplikaci/#reply1195006
TomasX
verified
rating uzivatele
(4 hodnocení)
10. 5. 2016 21:17:28
Na backend je lepší node.js, je to javascript a lidí je dostatek, nemusíš nic ohýbat, aby to fungovalo realtime.
No, moc víc jsi toho nenapasl :), sběr dat nám je k ničemu, když se bavíme o jejich zobrazování. Budu předpokládat, že děláš něco takovéhoto https://www.flightradar24.com/50.15,14.34/6
Vezmu tedy jako výchozí bod ten flightradar24. Na serveru mají velké množství dat a informací o letadlech, ale na klientovi se zobrazují pouze letadélka a zbytek dat se až po kliknutí na letadlo načte ze serveru. K vykreslení letadla ti stačí 3 údaje (x, y, radius). Vykreslovat je můžeš dvěma způsoby, buď ze serveru ti poteče tahle pozice a změníš jí na klientovi (náročné, pokud těch letadle bude opravdu hodně) nebo ze serveru přiteče poloprůhledná vrstva s letadýlky (png, gif) a tou překryješ mapu, nemusíš ani pokaždé posílat celou obrazovku, ale jen její výřez, tak nejspíš fungují google mapy a jejich overlaye. Další parametry můžeš vměsnat také do obrázku a třeba přidávat ikonky k letadlu nebo měnit jeho barvu podle nějakých údajů.
Mongo na to je ideální, takže ho tam určitě nech a je to dobrá volba. Jedinej framework, který potřebuješ je asi ten od googlu pro mapy, jinak se na frameworky vykašli a piš to rovnou v čistém javascriptu s pár knihovnami pro práci na síti (sockjs), s daty (underscore, lodash). Meteor a další nejsou na tohle stavěné, jejich jediný cíl je wow efekt, prakticky jsou strašně omezující a zbytečně budeš studovat framework místo, abys dělal aplikaci. Jakmile budeš mít funkční prototyp, můžeš přemýšlet o frameworku, o lepším návrhu či to někomu zadat jako zakázku, aby to dal do gala.
10. 5. 2016 21:17:28
https://webtrh.cz/diskuse/technologie-pro-real-time-aplikaci/#reply1195005
vpixle
verified
rating uzivatele
(3 hodnocení)
10. 5. 2016 21:23:29
Reseni, ktere tady jeste nepadlo je kombinace CouchDB + Pouch (JS klient pro Couch).
Nevim jestli to bude stacit, ale v takhle vetsinu prace, kterou si chtel od Meteoru bude delat samotna databaze napsana v nejakem C-cku bezici vzadu na serveru a klient, ktery dokaze vyuzit cas, kdy uzivatel nic moc nedela ta data klidne vykresli. NodeJS aplikace (a Meteor je NodeJS+MongoDB aplikace) si vymenuji pomerne velke baliky dat (sice asynchronne, ale kazdy ten stream je docela darda). Kdyz se podivas na sitove prenosy aplikace s Couch&Pouch mezi klientem a databazi se neustale vymenuji stovky datovych balicku, ktere jsou dostatecne male aby se ani jedna strana nezahltila. Vyzkousej (ale uz to tady nekolikrat padlo, stejne potrebujes udrzovat jenom polohu a nejakou zakladni identifikaci, vsechno ostatni se nacte az na zaklade dotazu/interakce).
10. 5. 2016 21:23:29
https://webtrh.cz/diskuse/technologie-pro-real-time-aplikaci/#reply1195004
Pro odpověď se přihlašte.
Přihlásit