Laravel / PHP - 25k soros excel importálása

Laravel / PHP - 25k soros excel importálása
2022-10-09T22:25:51+02:00
2022-10-11T10:43:47+02:00
2022-12-07T03:45:44+01:00
LaszloP
Sziasztok,

Segítséget szeretnék kérni.

Van egy már meglévő applikáció: Laravel 6x, Mysql 8, PHP 7.4, Redis, Horizon

A feladat:
Adva van egy tábla (cars), benne kb 5k rekorddal.
Ezt kellene összefésülni hetente 1x egy 25k excel táblázattal, az alábbiak szerint:
- az excel táblázatban meg kell keresni (mondjuk rendszám alapján) a mi adatbázisunkban is létező autókat, majd ezek néhány tulajdonságát felülírni az excel alapján.
Ez esetenként 5-600 autót érint.
+ menteni kellene adatbázisba a változásokat

Ahol tartok:
- UI-ból user feltölti az excel-t,
- job : excel megnyitása phpSpreedSheet-el, majd feldolgozása, változások mentése imports táblába egy rekordként (json field)

Kisebb (500-1000 sor) excel esetén szépen elvégzi a feladatot, de ha ráengedem a 25k soros excel-t akkor már nagyon bizonytalan, van hogy lemegy, van hogy nem.

Próbáltam már minden config-ot állítani, de valahogy nem az igazi semelyik.

Van esetleg valakinek hasonlóakkal tapasztalata? A fentinél esetleg jobb megközelítése?

Köszönöm
Mutasd a teljes hozzászólást!
...kötegelve alatt azt érted, hogy mondjuk 100-200 soronként teszed ki egy-egy külön job-ra őket? Ami így persze lényegesen gyorsabb egy job-ot tekintve, viszont így indít majdnem egyszerre 20-30 folyamatot ... Vagy kirakod az elsőt, megvárod míg végez, majd a következőt és így sorban

Az utóbbi. Nem szükséges 100-200 soronként külön job-ot indítani. Az ilyen párhuzamos feldolgozás gyorsabb, de bonyolultabb, felesleges ennyire túlgondolni. Egyetlen egy háttér szálat (job-ot) indítasz, abban pedig szekvenciálsan fel lehet dolgozni az egyes kötegeket. Azt minden Excel-t beolvasni tudó API-val meg lehet oldani, hogy pozicionálható a beolvasás első sora (főleg, hogy általában az ilyen adatexcel-ek fejlécet is szoktak tartalmazni a könnyebb átláthatóság miatt, de a gépi feldolgozás számára irreveláns). Feldolgozól 100-200 sort (megjegyzve az utolsó sor index-ét), frissíted az adatbázisban a szükséges mezőket, log-olsz mindent, amire esetleg később szükség lehet, aztán jöhet az újabb 100-200 sor, onnan ahonnan a korábbi befejeződött. És ez addig megy, ameddig az összes sort az Excel-ből fel nem dolgoztad. Ha végzett a program, akkor erről küldesz üzenetet a felhasználónak, olyan formában, ahogy az szükséges.
Mutasd a teljes hozzászólást!

  • Installation


    Én ezt a csomagot használom, lazán megy vele az 50k soros excel is.
    Mutasd a teljes hozzászólást!
  • Az ilyen excel-ből származó adatforrásokat lehetőleg a háttérben (külön szálban) szokás lefuttatni, de mindenképpen kötegelve. Mivel itt alapvetően (nagy méretű / sok adatot tartalmazó) fájl felolvasásáról van szó, ezért általában 100 (max. 200) soronként szoktam a feldolgozást elvégezni egyszerre, ahol egy-egy ilyen köteg feldolgozásáról log is készül, majd ha a program végzett az egésszel, akkor arról értesítést küld a felhasználó(k)nak (email, vagy ui message formájában). Ha nem kell a háttérben futnia, akkor ajax-al egy "homokóra" kimegy a felülete, a Please wait... felírattal, a de a háttérben a feldolgozás akkor is kötegelve történik.
    Mutasd a teljes hozzászólást!
  • Szia,

    A kötegelve alatt azt érted, hogy mondjuk 100-200 soronként teszed ki egy-egy külön job-ra őket? Ami így persze lényegesen gyorsabb egy job-ot tekintve, viszont így indít majdnem egyszerre 20-30 folyamatot.
    Vagy kirakod az elsőt, megvárod míg végez, majd a következőt és így sorban?

    Köszi

    L
    Mutasd a teljes hozzászólást!
  • ...kötegelve alatt azt érted, hogy mondjuk 100-200 soronként teszed ki egy-egy külön job-ra őket? Ami így persze lényegesen gyorsabb egy job-ot tekintve, viszont így indít majdnem egyszerre 20-30 folyamatot ... Vagy kirakod az elsőt, megvárod míg végez, majd a következőt és így sorban

    Az utóbbi. Nem szükséges 100-200 soronként külön job-ot indítani. Az ilyen párhuzamos feldolgozás gyorsabb, de bonyolultabb, felesleges ennyire túlgondolni. Egyetlen egy háttér szálat (job-ot) indítasz, abban pedig szekvenciálsan fel lehet dolgozni az egyes kötegeket. Azt minden Excel-t beolvasni tudó API-val meg lehet oldani, hogy pozicionálható a beolvasás első sora (főleg, hogy általában az ilyen adatexcel-ek fejlécet is szoktak tartalmazni a könnyebb átláthatóság miatt, de a gépi feldolgozás számára irreveláns). Feldolgozól 100-200 sort (megjegyzve az utolsó sor index-ét), frissíted az adatbázisban a szükséges mezőket, log-olsz mindent, amire esetleg később szükség lehet, aztán jöhet az újabb 100-200 sor, onnan ahonnan a korábbi befejeződött. És ez addig megy, ameddig az összes sort az Excel-ből fel nem dolgoztad. Ha végzett a program, akkor erről küldesz üzenetet a felhasználónak, olyan formában, ahogy az szükséges.
    Mutasd a teljes hozzászólást!
  • Köszi :)
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd