Feature #1125
closedHawat - Overview - zrychlení generování časového grafu i koláče
0%
Description
Mohlo by být rozumné říci si Mongu o data jednou a generovat z nich časový graf i koláč.
Updated by Pavel Kácha about 11 years ago
Také zjistit, jaké jsou indexy potřeba, pak probereme a zmergujeme.
Updated by Radomír Orkáč about 11 years ago
- Status changed from New to In Progress
Problem nebyl v indexech, map-reduce je strasne pomaly (nekde jsem myslim zahledl, ze tuto agregaci doporucuji na datech o poctu < 10 000). Udelal jsem velke upravy a podle prvnich testu (stejne vysledky) jsem se dostal ze 47 vterin na cca 8. Pouzil jsem aggregation pipeline, ktere pouzivam i u ostatnich agregacnich dotazech.
Jedno volani pro casovy graf a bezny graf jsem udelal, zde se jedna o zrychleni cca 1-3s.
Jeste mi ale chybi do dotazu zapracovat/predelat $match, ktery zahrnuje pouze timestamp, mel by i IP.
Ale tohle do porady jeste snad stihnu.
R.
Updated by Pavel Kácha about 11 years ago
Agregace - projekce a operátory, šlo by zkusit záměrným ztrácením přesnosti přes div/mod:
m=5, n=2 integerově: m/n = 2 reálně: m/n = 2.5 (m-(m%n))/n = 2
http://docs.mongodb.org/manual/reference/aggregation/operators/
Updated by Pavel Kácha about 11 years ago
Po pár pokusech: Mongo počítá reálně, ne celočíselně, takže je potřeba modulo. Zkusil jsem si, jak a jestli vůbec jdou vnořené operátory, a jestli podle toho půjde agregovat, tady to je, ať nemusíš lovit, jak se to dělá. Bude to ale chtít ještě rozšířit ten výpočet o odečtení začátku času grafu, a podle toho, jak s těmi daty budeš potom chtít zacházet ve výsledku.
Komplikace taky je, že to jde takhle přímo dělat jen s ts_u, která je numeric, ne s Alert.DetectTime.@ntpstamp, který je bindata.
db.alerts.aggregate([ { $match: { "Alert.Target.Node.Address.ipv4.ip":BinData(0, "w3G78w==") } }, { $project: { source: "$Alert.Source.Node.Address.ipv4.ip", time: "$ts_u", timegr: { $subtract: [ "$ts_u", { $mod: [ "$ts_u", 10000 ] } ] } } }, { $group: { _id: { timegr: "$timegr", source: "$source" }, sum: {$sum: 1} } }, { $sort: { "_id.timegr": 1 } }, { $limit: 10 } ])
Updated by Pavel Kácha about 11 years ago
Jo, a ten sort je možná nadbytečný, vzhledem k tomu, že si to asi k časovým kvantům budeš přiřazovat až v aplikaci a nejspíš teprve pak řadit.
Updated by Radomír Orkáč about 11 years ago
Porovnam rychlost a kdyz tak smaznu sort.
Pro casovy graf myslim sort nepouzivam..
Updated by Radomír Orkáč about 11 years ago
Upraveno a implementovano.
Nacitani a generovani dat jsme tim stahli z 24s na 7s.
$class2->{pipeline} = [ { '$match' => _process_query($query, $epoch_from, $epoch_to, Hawat::Model::Dashboard::AGGR_CLASS) }, { '$project' => { source => '$Alert.Classification.@text', time => '$ts_u', timegr => { '$divide' => [ {'$subtract' => [ {'$subtract' => ['$ts_u', $epoch_from]}, {'$mod' => [ {'$subtract' => ['$ts_u', $epoch_from]}, $timegr->{granul} ]} ]}, $timegr->{granul} ] } } }, { '$group' => { _id => { timegr => '$timegr', source => '$source' }, sum => {'$sum' => 1} } }, ];
Updated by Pavel Kácha about 11 years ago
Kchůl.
- Tak teď tím můžeš generovat i Analyzer.
- A myslím, že je zbytečné, aby tam tabule byly dvakrát, když v nich jsou prakticky stejné informace, ne?
- Bylo by asi také rozumné, aby se po najetí na hodnotu ukázala bublina, pokud je tabulka moc úzká, jsou třeba popisky nečitelné.
Updated by Pavel Kácha about 11 years ago
(11:20:05) pharook: ten časový graf u analyzéru vypadá, že zobrazuje hodnoty z dat klasifikace, ne analyzéru
Updated by Pavel Kácha about 11 years ago
- A myslím, že je zbytečné, aby tam tabule byly dvakrát, když v nich jsou prakticky stejné informace, ne?
- Ve dvou souvisejících grafech jsou barvy o jednu posunuté (ve druhém chybí první červená)
- Bylo by asi také rozumné, aby se po najetí na hodnotu ukázala bublina, pokud je tabulka moc úzká, jsou třeba popisky nečitelné.
Updated by Radomír Orkáč about 11 years ago
- A myslím, že je zbytečné, aby tam tabule byly dvakrát, když v nich jsou prakticky stejné informace, ne?
Odstraneno, upravil jsem template.
- Ve dvou souvisejících grafech jsou barvy o jednu posunuté (ve druhém chybí první červená)
Chyba byla v tom, ze jsem prochazel pole barev pres indexy a ten jsem zvysoval (++) hned na zacatku cyklu - opraveno.
- Bylo by asi také rozumné, aby se po najetí na hodnotu ukázala bublina, pokud je tabulka moc úzká, jsou třeba popisky nečitelné.
O tomhle jsme se na porade nebavili a tak nevim, ktere hodnoty to jsou. Tabulka je ted mnohem sirsi protoze jsem musel upravit template (viz prvni odrazka).
Updated by Pavel Kácha about 11 years ago
- Bylo by asi také rozumné, aby se po najetí na hodnotu ukázala bublina, pokud je tabulka moc úzká, jsou třeba popisky nečitelné.
O tomhle jsme se na porade nebavili a tak nevim, ktere hodnoty to jsou. Tabulka je ted mnohem sirsi protoze jsem musel upravit template (viz prvni odrazka).
Stejně jako v Alerts - ať se zobrazí obsah buňky z tabulky v bublině, jedno jak široká buňka to je.
Updated by Radomír Orkáč about 11 years ago
- Status changed from In Progress to Feedback
Hotovo -> bubliny dodany.
Updated by Pavel Kácha about 11 years ago
- Status changed from Feedback to Closed