Project

General

Profile

Actions

Feature #1125

closed

Hawat - Overview - zrychlení generování časového grafu i koláče

Added by Pavel Kácha over 10 years ago. Updated over 10 years ago.

Status:
Closed
Priority:
Normal
Category:
Development - GUI
Target version:
Start date:
07/29/2013
Due date:
% Done:

0%

Estimated time:
To be discussed:

Description

Mohlo by být rozumné říci si Mongu o data jednou a generovat z nich časový graf i koláč.

Actions #1

Updated by Pavel Kácha over 10 years ago

Také zjistit, jaké jsou indexy potřeba, pak probereme a zmergujeme.

Actions #2

Updated by Radomír Orkáč over 10 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.

Actions #3

Updated by Pavel Kácha over 10 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/

Actions #4

Updated by Pavel Kácha over 10 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
} 
])
Actions #5

Updated by Radomír Orkáč over 10 years ago

Diky, mrknu na to.

R.

Actions #6

Updated by Pavel Kácha over 10 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.

Actions #7

Updated by Radomír Orkáč over 10 years ago

Porovnam rychlost a kdyz tak smaznu sort.
Pro casovy graf myslim sort nepouzivam..

Actions #8

Updated by Radomír Orkáč over 10 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}
                    }  
                }, 

            ];
Actions #9

Updated by Pavel Kácha over 10 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é.
Actions #10

Updated by Pavel Kácha over 10 years ago

(11:20:05) pharook: ten časový graf u analyzéru vypadá, že zobrazuje hodnoty z dat klasifikace, ne analyzéru

Actions #11

Updated by Pavel Kácha over 10 years ago

Zbývá:
  • 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é.
Actions #12

Updated by Radomír Orkáč over 10 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).

Actions #13

Updated by Pavel Kácha over 10 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.

Actions #14

Updated by Radomír Orkáč over 10 years ago

  • Status changed from In Progress to Feedback

Hotovo -> bubliny dodany.

Actions #15

Updated by Pavel Kácha over 10 years ago

  • Status changed from Feedback to Closed
Actions

Also available in: Atom PDF