Databáze podobná RRD – MySQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Databáze podobná RRD – MySQL – Fórum – Programujte.comDatabáze podobná RRD – MySQL – Fórum – Programujte.com

 

Pavelv0
Stálý člen
9. 7. 2014   #1
-
0
-

Zdravím, do db ukládám kažkou minutu svá data z meteostanice.Poté následně kreslím grafy (denní, týdenní, měsíční, roční,...) A potřebuji mít možnost koukat podrobně na libovolný den zpětně. Takže v jedné tabulce budou všechny data. Pak ale při vykreslování grafu za dlouhé období načítám značné množství dat. Napadlo mi udělat více tabulek, kde by byli třeba hodnoty po hodině, 12h,.... Šli by ty tabulky vytvářet přes trigery? Je zapotřebí duplikovat celý obsah řádku? Záznamy v původní tabulce nejsou vždy po minutě(výpadky elektřiny, údržba,...). Jaké zvolit efektivní řešení?

Nahlásit jako SPAM
IP: 109.235.7.–
p3can
~ Anonymní uživatel
312 příspěvků
10. 7. 2014   #2
-
0
-

http://dev.mysql.com/doc/refman/5.6/en/features.html

Support for large databases. We use MySQL Server with databases that contain 50 million records. We also know of users who use MySQL Server with 200,000 tables and about 5,000,000,000 rows.

pokud se bojis o kapacitu tabulky tak bych se asi nebal. a proc ze to neresis pres where klauzuli?

Nahlásit jako SPAM
IP: 77.92.213.–
Pavelv0
Stálý člen
10. 7. 2014   #3
-
0
-

#2 p3can
Myslíš jednu tabulku se vším a přes WHERE dostat dostat hodinové průměry? To nevím jak. Nicméně i tak se budu přehrabovat v db a vybírat jen pár dat.

Nahlásit jako SPAM
IP: 109.235.7.–
Kit+15
Guru
10. 7. 2014   #4
-
0
-

#3 Pavelv 

SELECT date(ts) AS dd, hour(ts) AS hh, avg(teplota) AS prumer
    FROM meteo GROUP BY dd, hh;
Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
10. 7. 2014   #5
-
0
-

Pokud chceš pracovat jen s částí velkého objemu dat, vytvoříš si dočasnou tabulku a nebo pohled, naplníš ji nebo ho podmnožinou dat se kterou chceš pracovat. Dočasná tabulka je pomalejší při vytváření, ale každý klient má svou. Ve složitějších selectech s dočasnou tabulkou může být problém - Can´t reopen table. Pohled je rychlejší, ale je pro celou db jako běžná tabulka. Pohledy lze vytvářet s unikátními názvy a tím klienty od sebe "izolovat", řešilo se to tu nedávno.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Pavelv0
Stálý člen
10. 7. 2014   #6
-
0
-

#4 Kit
No ale tim nezískám pole hodnot např. za celý měsíc, kde každá hodnota průměrována cca 60 vzorky(hodinou)

Nahlásit jako SPAM
IP: 109.235.7.–
Kit+15
Guru
10. 7. 2014   #7
-
+1
-
Zajímavé

#6 Pavelv
Jak to že ne? Mně to krásně funguje. V čem vidíš problém? 

CREATE TABLE `meteo` (
  `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
       ON UPDATE CURRENT_TIMESTAMP,
  `teplota` float(6,2) DEFAULT NULL
) ENGINE=InnoDB;

INSERT INTO `meteo` VALUES
('2014-06-10 00:14:55',23.50),
('2014-07-10 00:01:38',23.40),
('2014-07-10 00:01:45',23.20),
('2014-07-10 00:01:54',23.10),
('2014-07-10 00:02:00',23.00),
('2014-07-10 00:02:10',22.90),
('2014-07-10 00:02:14',22.80),
('2014-07-10 00:02:18',22.70),
('2014-07-10 00:04:25',22.60),
('2014-07-10 08:55:06',22.60);

SELECT date(ts) AS d, hour(ts) AS h, avg(teplota) AS hodinovka
    FROM meteo GROUP by d, h;
Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
10. 7. 2014   #8
-
0
-

Objem dat lze redukovat "vzorkováním" - vybereš např každou pátou hodnotu. Rozestup mezi hodnotami je dobré odvodit od rozlišení grafu - kolik bodů může fakticky vykreslit (v závislosti na rozlišení monitoru je to několik set bodů). 

Chceš vykreslovat graf "hodinové průměry teplot"? Tzn zprůměrovat každou hodinu jako samostatný průměr a pak vykreslit graf průměrů za např. 28 hodin?

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Pavelv0
Stálý člen
10. 7. 2014   #9
-
0
-

#7 Kit
Jojo už to běhá, jen šlo by udělat i jiný průměr? Třeba dvouhodinový, půldenní,..

Nahlásit jako SPAM
IP: 212.79.110.–
Kit+15
Guru
10. 7. 2014   #10
-
+1
-
Zajímavé

#9 Pavelv
Šlo, jen to chce zapojit trochu fantazie. Například šestihodinový 

SELECT date(ts) AS d,
    hour(ts) - hour(ts)mod 6 AS h6,
    avg(teplota) AS hodinovka
    FROM meteo GROUP by d, h6;
Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
sleepy
~ Anonymní uživatel
422 příspěvků
10. 7. 2014   #11
-
0
-

Tomuto sa podla mna hovori ist s kanonom na vrabce. Za 10 rokov budes mat asi oklo 5.3e6 zaznamov. Na tvojom mieste by som to s kludnym svedomim ukladal ako plain text. Ale zalezi o co ti ide. Ak ti ide o to naucit sa nieco s mysql tak potom v poriadku. A tam tiez nemusis nic velmi riesit. Skus floor (dolna cela cast) SELECT avg(teplota), day(ts) as dd, hour(ts) AS hh FROM meteo GROUP BY dd, FLOOR(hh/2);  Aj ked nebude to uplne ono na to aby ti to pocitalo kazde 2 hod od zaciatku by si potreboval vediet kolko bolo hod. na zaciatky a to odratat od sucasneho casu.

Nahlásit jako SPAM
IP: 158.195.206.–
Kit+15
Guru
10. 7. 2014   #12
-
0
-

#11 sleepy
Jakou výhodu bude mít 5.3e6 záznamů v plain textu? Aspoň CSV.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
sleepy
~ Anonymní uživatel
422 příspěvků
10. 7. 2014   #13
-
0
-

Vyhody: uspora casu. Zariadenie na ktorom to bezi nevyzaduje mysql. Nemusi sa ucit SQL (ale to patri do uspory casu). Moze si ulozit {1,2,3,...,n} hodinove priemery a uz ich nemusi nikdy pocitat, aj ked toto sa da aj v mysql. Dokonca ak by chcel nejaky dlhodoby priemer k-hodin kde k == 0 (mod n1) tak mu staci orobit priemer s n1 zaznamov. Tieto zaznami su prirodzene dobre usporiadane a navyse sa uz nebudu menit. Ci uz pouzije csv, xmolocha alebo nieco ine je len na nom. Ale ak mu ide o to naucit sa sql, tak len smelo do toho.

Nahlásit jako SPAM
IP: 158.195.206.–
Kit+15
Guru
10. 7. 2014   #14
-
0
-

#13 sleepy
Jestli tím xmolochem myslíš XML, tak ten se na logování vůbec nehodí.

Jen je trochu problém u těch textových souborů udržet konzistenci.

Co se týká předpočítaných hodinových průměrů, tak to MySQL zvládne hravě. Umí to i SQLite, pokud bys nechtěl jít s kanónem na vrabce. Je to takový rozumný kompromis mezi MySQL a textem.

Jen tak na závěr: MySQL pracuje i s engine=CSV. Takže primární data se logují do CSV a trigger updatuje hodinové a denní průměry, které mohou být v MyISAM nebo InnoDB.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 6 hostů

Podobná vlákna

Vlastní RRD — založil Pavelv

Struktura podobna HashMap — založil BigBear

Podobná vec ako CATPCHA... — založil Laik

Databáze — založil Tomáš

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý