[PHP] Van esetleg MySQL adatbázis tömeges adatbevitel sebességének gyorsítására módszer?
Sziasztok! A szíves segítségeteket szeretném kérni. Jelenleg egy akkora adatmennyiséget kellene feldolgoznom, ami egyelőre úgy tűnik hónapokig tartó folyamat lenne. TXT fájlokban, külön sorokban van nekem 120 millió adatom. Ezt a 120 millió adatot szeretném egy adatbázisba gyömöszölni. Az első ötlet, amivel elő tudtam állni, az-az, hogy 120 külön táblába rakom őket, és így minden táblában lesz 1 millió rekord. Viszont így feltöltésnél ellenőriznem kell, minden korábbi táblában, hogy az-az adat már tárolva van-e más táblában (a fájlokban van ismétlődő adat). Egy teljesen alap szkript így 600 adatot tud felvinni percenként, vagyis 864.000-et naponta. Ez nekem lassú. Ha az adatokat SQL fájlokba rendezem, és importálom a phpMyAdmin-ba (táblánként), akkor pedig ismétlődni fognak az adatok, visszamenőleg pedig szerintem 120.000.000 * 120 lekérdezést kellene minimum futtatni e célból. Van esetleg valakinek ötlete arra, hogy milyen módon kellene felvinnem az adatokat úgy, hogy körülbelül egy héten belül végezzek vele? A válaszokat előre is köszönöm! :)
UI: Minden tábla egy oszlopos (még).
Nem vagy MySQL szakértő, de szerintem 10 sor / mp az egy kicsit lassú nekem.
Mint mondtad, egy sor az egy adat; esetleg nincs egy számodra megfelelő ilyesmire specializált szoftver? (nem tudom, számokat vagy szöveget akarsz tárolni?) A másik dolog, hogy mit akarsz vele kezdeni?
Csak kíváncsiságból megkérdezném, hogy mekkora helyet foglal az a 120M adat?
-----
pár link ami segíthet:
A 12 külön tábla baromság.
Ha egyféle adatot tárolsz, akkor azt 1 táblába kell tenni, nem is értem mi értelme külön táblákra rendezni.
Minek? Hogy nehezebb legyen keresni benne?
Másrészt: egy oszlopos tábla?? Milyen adatok ezek?
> 120 külön táblába rakom őket, és így minden táblában lesz 1 millió rekord
Ezzel semmilyen optimalizációt nem érsz el.
Tapasztalatból (utánaolvasások és kísérletek) ezeket tudom mondani nagy adattömegek gyors bevitelére:
- batch insert gyorsabb, mint 1-1 rekord insertelése, 10ezer rekordot szoktak javasolni 1 insertbe
- ez gyorsítható valamivel, ha az indexeket törlöd a tábláról az insertek előtt, és az utolsó insert után visszateszed
- de a legoptimálisabb a LOAD DATA INFILE, ami CSV jellegű fájlokat fogad és szénné van optimalizálva, nagyságrendekkel ver mindenféle insert-es mókolást
Méréseim:
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!