Oldal: 1 / 2 12 UtolsóUtolsó
Eredmény: 1 - 10 (14) összesen

Téma: Mysql insert gyorsan

  1. #1
    Hekker 0xFF logója
    Csatlakozott
    09-08-21
    Hozzászólás
    1.079
    Begyűjtött 168 köszönetet
    118 hozzászólásával

    Alapbeállítás Mysql insert gyorsan

    Azt szeretném megtudni, hogy melyik a legegyorsabb módja annak hogy rengeteg adatot jutassak egy MySQL adatbázisba.

    Probálkoztam előszőr a php + INSERT INTO x VALUES (1,1,1);
    Ezzel a módszerrel 1.000.000 sort kb 9 óra alat lehetett bevinni.

    Utánna az INSERT INTO x VALUES (1,1,1), (2,2,2,) ... (n,n,n);

    Némi javulást tapasztalatam de nem sokat.

    Most ott tartok hogy generálok CSV fileokat amelyekben 250.000 sor van majd ezt próbálom meg
    LOAD DATA INFILE 'adat01.txt' INTO TABLE `table` FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n'

    A tábla ahova az adatokat szeretném bevinni 4 oszlopból áll és 2 oszlopon van index.

    Egyszerübb lenne ha index nélkül vinném fel az adatokat majd utánna készíteném el az indexet?

    Adat : ~ 9miliard sor * ~ 110-130 byte / sor

    Köszönöm.



  2. #2
    Mentor arth2o logója
    Csatlakozott
    10-03-11
    Hely
    Győr
    Hozzászólás
    408
    Begyűjtött 7 köszönetet
    2 hozzászólásával

    Alapbeállítás re: Mysql insert gyorsan

    Parancssorban kéne megoldanod, nem PHP-vel futtatva.
    Ha az indexeket később rakod rá (ami valószínűleg szintén sok időt fog igénybe vennei), akkor gyorsabban bekerülnek a sorok.

    Teszteléshez kevés adatok használj, mielőtt ráereszted az egészet. Sőt nem volna rossza, egy kicsit menet közben várakozni az adagok között.

    De ennyi rekordnál ne számíts sokkal gyorsabb adatfelvételre.



  3. #3
    problémageneráló ptrth logója
    Csatlakozott
    11-01-04
    Hely
    Diliház
    Hozzászólás
    209
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: Mysql insert gyorsan

    Javaslom ezt a MySQL cikket:
    Speed of INSERT Statements: http://dev.mysql.com/doc/refman/5.1/...ert-speed.html

    Az általad is említett LOAD DATA INFILE módszer 20x gyorsabb, mint a sima INSERT INTO módszer. 5.5-ös MySQL előtt még ezt is gyorsítani lehet az oldalon leírt módszerrel, aminek kb. az a lényege, hogy törlöd az indexeket, és az adatok feltöltése után nem a sima CREATE INDEX-el építed újra az indexet, hanem az
    myisamchk -rq /path/to/db/tbl_name
    paranccsal, ami jóval gyorsabb



  4. #4
    Hekker 0xFF logója
    Csatlakozott
    09-08-21
    Hozzászólás
    1.079
    Begyűjtött 168 köszönetet
    118 hozzászólásával

    Alapbeállítás re: Mysql insert gyorsan

    A parancssort kipróbálom majd, mindenképp, habár a php is php-cli ben fut, szal nincs semmi limit, se CPU se memória.

    Gondolkodtam azon is, hogy esetleg belepiszkálni a my.cnf ba de annyira nem értek hozzá.

    Nekem nagyon soknak tűnt a 9 óra 1milió recordnál, igaz hogy sima SATA HDD meg 1GB ram de akkor is.. annak lehet köze, hogy az adatok bináris formában vannak?

    Kilövöm akkor az indexet és megpróbálom úgy felvinni, csak kérdés az, hogy utána az index felépítése hány napot fog igénybe venni?



  5. #5
    problémageneráló ptrth logója
    Csatlakozott
    11-01-04
    Hely
    Diliház
    Hozzászólás
    209
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: Mysql insert gyorsan

    Az általam írt index létrehozás elvileg jóval gyorsabb a CREATE INDEX-nél. De az biztos, hogy 9 milliárd sornál mindenképpen iszonyat hosszú lesz.


    Utoljára módosítva: ptrth által : 2011-03-28 10:32 Oka: helyesírás

  6. #6
    Bölcs
    Csatlakozott
    09-08-20
    Hozzászólás
    524
    Begyűjtött 47 köszönetet
    39 hozzászólásával

    Alapbeállítás re: Mysql insert gyorsan

    Ekkora táblánál szerintem nem csak a bevitel lesz a lassú, hanem a select is. Ide már minimum tábla partícionálást is illik csinálni:
    http://dev.mysql.com/doc/refman/5.1/...titioning.html



  7. #7
    Bölcs
    Csatlakozott
    09-08-20
    Hozzászólás
    524
    Begyűjtött 47 köszönetet
    39 hozzászólásával

    Alapbeállítás re: Mysql insert gyorsan

    Ami szerintem még gyorsíthatja, hogy a hdd-re írást szabályozod valamilyen formában. Ez lehet MySQL konfigból, hogy ne minden insertet írjon egyből (7200 rpm-es HDD 9ms elérési idővel rendelkezik), vagy tranzakciókezelést raksz bele, és csak 10e soronként nyomsz commit-ot.
    Érdemes erre az időre kikapcsolni a mysql logolását is, hogy minél kevesebb egyéb párhuzamos művelet legyen a diszken. Azt nem írtad milyen storage engine-t használsz, de talán lehet azon is váltani, hogy gyorsíts rajta.



  8. #8
    Hekker 0xFF logója
    Csatlakozott
    09-08-21
    Hozzászólás
    1.079
    Begyűjtött 168 köszönetet
    118 hozzászólásával

    Alapbeállítás re: Mysql insert gyorsan

    MyISAM, ot használok, úgy terveztem, hogy majd a végén darabolok, mert azzal én is tisztában vagyok, hogy 4 milliárd felett elég lassan működnek a dolgok.

    A disk I/O-t mindenképp le kell csökkentenem mert ez így egy örökkévalóság lesz.

    "Ez lehet MySQL konfigból, hogy ne minden insertet írjon "

    Esetleg erről bővebben? tudnál valami linket vagy infot adni?

    Köszönöm.



  9. #9
    problémageneráló ptrth logója
    Csatlakozott
    11-01-04
    Hely
    Diliház
    Hozzászólás
    209
    Begyűjtött 0 köszönetet
    0 hozzászólásával

  10. #10
    Bölcs
    Csatlakozott
    09-08-20
    Hozzászólás
    524
    Begyűjtött 47 köszönetet
    39 hozzászólásával

    Alapbeállítás re: Mysql insert gyorsan

    A későbbiekben esetleg gond lehet, ha tábla szintű lock kerül rá esetleg update vagy instertnél, lehet előnyösebb lenne olyan engine-t választani ahol sor lock van.



Oldal: 1 / 2 12 UtolsóUtolsó

A téma címkéi:

Könyvjelzők

Hozzászólás szabályai

  • Új témákat nem hozhatsz létre
  • Válaszokat nem küldhetsz
  • Fájlokat nem csatolhatsz
  • A hozzászólásaidat nem módosíthatod
  •