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