adatbazis archivalas es visszaolvasas
Egy projecten dolgozok (php/mysql), ami eladasokat, log-okat...stb kezel/tarol. Az adatbazist adott idokozonkent (pl havonta) archivalni kellene, viszont fontos, hogy az archivumbol visszakereshessek adatokat ugyanugy mintha az "elo" adatbazisbol keresnek. Szoval ha mult honap eladasait learchivaltam, akkor is kepesnek kell lennem lekerni a mult honapbol 5 napot es a jelenlegibol 5 napot egyben.
Dump-olni akartam az adabazist, es visszatolteni egy temp adatbazisba majd unionnal lekerdezni, de nincs erre valami szebb/gyorsabb megoldas?
Es azt sem tudom megoldani, hogy egyszerre tobb archiumbol es az elo adatbazisbol is lekerhessek egyszerre.
re: adatbazis archivalas es visszaolvasas
A mysql tud olyan hogy partition, ezen belül is dátum tipusú particionálást. Ha ezt megcsinálod, akkor logikailag 1 táblába kerülnek a dolgaid, fizikailag pedig több táblában tárolódnak. Igy ha a megfelelő adatbázis lekérdezés esetén mindig csak az adott darabból kérdez le a rendszer.
Ezzel eléred, hogy a folyamatban lévő dolgok gyorsak legyenek, viszont nem veszted el a hisztorikus adatokhoz való hozzáférést.
Ha ez a funkció számodra nem elérhető, akkor marad a régi módszer.
Lessz egy adat táblád amiben tartod az utolsó x nap adatit.
Lessz egy pár adat_2014_xx táblád ahol a régi adatokat tartod.
Lessz egy adat_index táblád, amiben pedig a létrehozott táblákat tartod, az első és az utolsó rekord dátumával kiegészítve.
Egy cronjob minden reggel átmozgatja a már nem aktuális adatokat az adat táblából az adat_2014_xx -be, majd törli őket az adat-ből és frissiti az adat_index tábládat.
A lekérdezés pedig mehet egy php függvényen keresztül ami a szükséges elemeket egy union-al össze fűzi.
Azonban felmerül a kérdés, hogy miért van erre szükséged. A mysql még myisam esetében is igen jól elvan 20-40 millió sorral egy táblában, az innodb pedig ennél is jobban teljesit, ha be van, kapcsolva, hogy minden tábla külön file. Persze ha nagy text mezőket és blobokat használsz, akkor drasztikusan vissza esik a teljesítmény.
re: adatbazis archivalas es visszaolvasas
Vagy ott van még az ARCHIVE tábla típus, direkt ilyen célra. Ezt csak olvasni lehet, viszont nem tárolja a memóriába, csak diszken.
re: adatbazis archivalas es visszaolvasas
Idézet:
TLoF eredeti hozzászólása
Azonban felmerül a kérdés, hogy miért van erre szükséged.
Ezt most hosszu lenne elmagyarazni, de fontos, hogy uritsem a tablakat havonta, es csak az nezhesse vissza akinek fizikailag a birtokaban vannak az arhivok (cd-n...stb)
Errol a partition es archive tipusrol meg nem hallottam de most utannaneztem es ugy tunik megoldottatok a problemam :) Koszi szepen!
re: adatbazis archivalas es visszaolvasas
Ha fizikailag külön adathordozón kell lennie, akkor egyik megoldás se jó, mert ezek a MySQL szerveren belül vannak.
Ezt nézd meg esetleg: http://www.maatkit.org/doc/mk-archiver.html
re: adatbazis archivalas es visszaolvasas
az nem problema mert magat az adatbazis fajlt mentem es toltom vissza (frm,myd). Pontosabban akartam, de mivel 4-5 tabla osszekapcsolasaval tudok lekerdezni, igy azokat is mentenem kell meg visszatolteni. Szoval vegul maradt a legrondabb megoldas. Dump-al mentem a teljes adatbazist, es temp adatbazisba toltom vissza es osszekapcsolom az elo adatbazissal lekerdezesnel. Eleg kokany megoldas, de nem akartam mar tobbet veszodni vele.
Mindenesetre koszonom a segitseget!
Idézet:
charlie eredeti hozzászólása