Kezdőoldal » Számítástechnika » Programozás » [PHP] Van esetleg MySQL...

[PHP] Van esetleg MySQL adatbázis tömeges adatbevitel sebességének gyorsítására módszer?

Figyelt kérdés

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).


2015. dec. 21. 22:13
 1/5 uno20001 ***** válasza:
100%

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:


[link]

[link]

[link]

[link]

2015. dec. 21. 23:06
Hasznos számodra ez a válasz?
 2/5 uno20001 ***** válasza:
*Nem vagyok
2015. dec. 21. 23:06
Hasznos számodra ez a válasz?
 3/5 anonim ***** válasza:
100%

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?

2015. dec. 21. 23:24
Hasznos számodra ez a válasz?
 4/5 anonim ***** válasza:
100%

> 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:

[link]

2015. dec. 21. 23:29
Hasznos számodra ez a válasz?
 5/5 A kérdező kommentje:
Köszönöm a segítséget! PHP-val egy pillanat alatt megformáztam a szövegeket, és feltöltöttem őket a load data infile-al. Töröltem a duplikációkat ALTER IGNORE TABLE foobar ADD UNIQUE ()-al. Így minden egy táblában van.
2015. dec. 21. 23:36

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!