No, pokud doufáte v novou odpověď, znamená to, že jste pravděpodobně četli mé odpovědi a zním jako rozbitá deska. Viz Blog o rozdělení disku pro několik případů použití, kdy rozdělení může pomoci výkonu. Vaše není zní jako kterýkoli ze 4 případů.
Zmenšit device_id
. INT
je 4 bajty; opravdu máte miliony zařízení? TINYINT UNSIGNED
je 1 bajt a rozsah 0..255. SMALLINT UNSIGNED
je 2 bajty a rozsah 0..64 kB. Tím se stůl trochu zmenší.
Pokud váš skutečný otázka je, jak spravovat tolik dat, pak pojďme "myslet mimo krabici". Čtěte dál.
Graf... Jaká časová období zobrazujete v grafu?
- „Poslední“ hodina/den/týden/měsíc/rok?
- Libovolná hodina/den/týden/měsíc/rok?
- Libovolný rozsah, který není vázán na hranice dne/týdne/měsíce/roku?
Co kreslíte?
- Průměrná hodnota za den?
- Max/min za den?
- Svícny (atd.) na den, týden nebo cokoliv jiného?
Bez ohledu na případ byste měli vytvořit (a postupně udržovat) souhrnnou tabulku s daty. Řádek bude obsahovat souhrnné informace za jednu hodinu. Navrhoval bych
CREATE TABLE Summary (
device_id SMALLINT UNSIGNED NOT NULL,
sensor_id TINYINT UNSIGNED NOT NULL,
hr TIMESTAMP NOT NULL,
avg_val FLOAT NOT NULL,
min_val FLOAT NOT NULL,
max_val FLOAT NOT NULL
PRIMARY KEY (device_id, sensor_id, hr)
) ENGINE=InnoDB;
Jedna souhrnná tabulka může mít 9 GB (pro aktuální množství dat).
SELECT hr,
avg_val,
min_val,
max_val
FROM Summary
WHERE device_id = ?
AND sensor_id = ?
AND hr >= ?
AND hr < ? + INTERVAL 20 DAY;
Dalo by vám hodnoty hi/lo/avg pro 480 hodin; stačí na graf? Získání 480 řádků ze souhrnné tabulky je mnohem rychlejší než získání 60*480 řádků z tabulky nezpracovaných dat.
Získávání podobných dat po dobu jednoho roku by pravděpodobně udusilo balík grafů, takže může stojí za to vytvořit shrnutí shrnutí - s rozlišením dne. Bylo by to asi 0,4 GB.
Existuje několik různých způsobů, jak vytvořit souhrnné tabulky; můžeme o tom diskutovat poté, co se zamyslíte nad její krásou a přečtete si Blog souhrnných tabulek . Může se stát, že nejlepším způsobem je shromáždit data za jednu hodinu a poté rozšířit souhrnnou tabulku. To by bylo něco jako klopný obvod, o kterém se diskutuje můj blog o stole Staging .
A pokud jste měli hodinové souhrny, opravdu potřebujete data minutu po minutě? Zvažte její vyhození. Nebo možná data po, řekněme, jednom měsíci. To vede k použití rozdělení, ale pouze ve prospěch mazání starých dat jak je popsáno v "Případ 1" blogu o rozdělení
. To znamená, že byste měli denní oddíly pomocí DROP
a REORGANIZE
každou noc posouvat čas tabulky "Fakt". To by vedlo ke snížení vašeho 145GB prostoru, ale bez ztráty velkého množství dat. Nová stopa:Asi 12 GB (hodinový souhrn + podrobnosti minut po minutě za posledních 30 dní)
PS:Blog souhrnné tabulky ukazuje, jak získat směrodatnou odchylku.