uložení a agregace údajů v PostgreSQL

Karel Zak zakkr na zf.jcu.cz
Pondělí Březen 18 13:35:42 CET 2002


On Mon, Mar 18, 2002 at 11:48:30AM +0100, Havel Zdeněk wrote:
> Dobrý den,
> 
> do databáze bych chtěl ukládat sbíraná data ze zařízení a potřebuji provádět
> jejich agregaci v případě že jsou starší než stanovený čas. Po provedení
> výpočtu průměru a zapsání údaje do další tabulky se agregovaná data smažou.
> 
> Pro představu, data se budou sbírat v začátku ze 60ti zařízení, u každého v
> průměru 3 údaje, z čehož plyne že každá z tabulek bude mít v plném běhu
> kolem 518400 záznamů. Zatím předpokládejme že data která budou za hranicí
> stáří pro 30min_table budou odstraněna.

 Jak rychle ty udaje budou pribyvat? Zda se, rychle.

 Pokud ty data nebudete skladovat a nebudete s toho delat nejaky DW,
 tak bych se zamyslel nad tim ma-li cenu je na 1min. davat do DB. IMHO
 je to blbost a daval bych tam jen vysledky. Klient (sberac dat) by
 si ty udaje mel udrzovat v pameti a agregovat sam a az pak davat do DB. 
 Pokud na tom ukladani do DB trvate tak bych i tak daval ty data do te DB 
 po vetsich kusech (treba 3000 radek) a pomoci COPY (viz. treba reseni v 
 C popsane na linuxzone).

 Co se tyka te agregace. Potrebujete ty udaje kazdou minutu? Proc je 
 neagregovat az je bude treba apod. Na to udela ted nejaky zaver je 
 jste poslal dost malo informaci :-)

> Agregaci by bylo vhodné patrně vázat na insert trigger pro 1min_table.

 Trigger je "udalostni" zalezitost. To znamena, ze by to, ze ma agregovat
 by musel poznat z dat.

> Struktura databáze:
> 
> 1min_table (data sbíraná v intervalu 1 minuta max, stáří 48h):
> device 	- char(32)
> time 		- timestamp
> type		- char(32)
> value		- float

 Co je type a device - je to natolik ruznorode, ze to nemuze byt 
definovano v nejake ciselniku? 
 
> primární klíč je (device,time,type)
> value je indexovano

 Proc je to indexovano, budete to GROUP BY delat podle te value? 
(jak bude vypadat ten select s tou agregaci?).

> 5min_table (5min průměry počítané z dat v 1min_table, max stráří 10 dní):
> device 	- char(32)
> time 		- timestamp
> type		- char(32)
> value		- float
> 
> primární klíč je (device,time,type)
> value je indexováno
> 
> 30min_table (30 min průměry počítané z dat v 5min_table, max stáří 60 dní}:
> device 	- char(32)
> time 		- timestamp
> type		- char(32)
> value		- float
> 
> primární klíč je (device,time,type)
> value je indexováno

 Proc nemate jednu tabulku s agregacemi ruzneho stari?

 Me to zatim pripada, jak takove mensi znasilneni DB (neberte to 
nijak spatne) Jeste bych nad tim premyslel nebo poslal vice 
informaci :-)

    Karel
-- 
 Karel Zak  <zakkr na zf.jcu.cz>
 http://home.zf.jcu.cz/~zakkr/
 
 C, PostgreSQL, PHP, WWW, http://docs.linux.cz, http://mape.jcu.cz


Další informace o konferenci Test