![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 655 Pomógł: 73 Dołączył: 2.05.2014 Ostrzeżenie: (0%) ![]() ![]() |
Cześć!
Przejde do rzeczy. Mamy tablice, w ten sposób:
Ogólnie takich małych tablic po 5-6 rekordów jest ok. 8mln. Podzielone są po 70 tyś. Teraz te 70 tyś. zapisuje w postaci .csv:
Teraz sedno sprawy: Przy 100k rekordów trwa to dosłownie kilka sekund. Przy 1mln trwa to już średnio 3 minuty (ostatnia próba: 223 sekundy) (licze z pomocą microtime(true)). Nawet boje się włączyć na 8mln rekordów... Jakiś pomysł jak to przyśpieszyć? Cel: zapis do pliku .csv. Ten post edytował Forti 7.08.2015, 09:57:19 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Jeśli chodzi o ten myk z cudzysłowem, to nie szkodzi. Miałem parę razy podobny problem i niestety mniej więcej tak się go rozwiązuje, więc jest to OK.
Jeśli chodzi o sam czas, to najprawdopodobniej to przez to, że ładujesz wszystkie dane do pamięci, przez co maszyna jest tak obciążona, że wszystko działa dużo wolniej. Jeśli pobierasz dane z bazy, to rób to jakimś data provider iteratorem i pobieraj w segmentach. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 655 Pomógł: 73 Dołączył: 2.05.2014 Ostrzeżenie: (0%) ![]() ![]() |
Nie stety, ale dane są najpierw pobierane w kilku plików (każdy po 1mln), parsowane odpowiednio i zapisywane. Cały proces od kilku dni optymalizuje jak tylko się da.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 958 Pomógł: 574 Dołączył: 23.09.2008 Skąd: wiesz, że tu jestem? Ostrzeżenie: (0%) ![]() ![]() |
Nie bardzo rozumiem po co ci ten stream, przecież niżej otwierasz plik i wrzucasz do niego dane z bazy. Jak dla mnie podwójna robota.. coś w ten deseń
@edit: upitoliłem foreacha, trzeba go przywrócić (IMG:style_emoticons/default/wink.gif) Ten post edytował CuteOne 7.08.2015, 10:11:24 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Nie stety, ale dane są najpierw pobierane w kilku plików (każdy po 1mln), parsowane odpowiednio i zapisywane. Cały proces od kilku dni optymalizuje jak tylko się da. No to musisz bardziej doprecyzować co to znaczy "odpowiednio parsowane i zapisywane". Nie bardzo rozumiem po co ci ten stream, przecież niżej otwierasz plik i wrzucasz do niego dane z bazy. Jak dla mnie podwójna robota.. coś w ten deseń
Wczytaj się jeszcze raz w to co ten kod robi. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 655 Pomógł: 73 Dołączył: 2.05.2014 Ostrzeżenie: (0%) ![]() ![]() |
Z tym parsowaniem to nie istotne, po prostu pobieram zawartość z plików (zmienne), obrabiam i dopasowuje w odpowiednie zmienne. Słowa kluczowe itp.
Ogólnie całość i tak ląduje w takiej tablicy i nie bardzo mam jak inaczej to zrobić. Jeżeli nie ma innego sposobu a tak dużą tablice zapisać w .csv w szybszy sposób, to będzie musiało to tak zostać.. Ten post edytował Forti 7.08.2015, 10:19:35 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
londuje (IMG:https://s-media-cache-ak0.pinimg.com/236x/0c/f5/19/0cf519769a6212d46d7a8e333c1849ea.jpg) Z tym parsowaniem to nie istotne, po prostu pobieram zawartość z plików (zmienne), obrabiam i dopasowuje w odpowiednie zmienne. Słowa kluczowe itp. Ogólnie całość i tak londuje w takiej tablicy i nie bardzo mam jak inaczej to zrobić. Jeżeli nie ma innego sposobu a tak dużą tablice zapisać w .csv w szybszy sposób, to będzie musiało to tak zostać.. Czyli jednak źle robisz. Pobieraj z tych plików w mniejszych segmentach i obrabiaj tak samo. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 655 Pomógł: 73 Dołączył: 2.05.2014 Ostrzeżenie: (0%) ![]() ![]() |
*ląduje lol skąd to sie tam wzięło (IMG:style_emoticons/default/biggrin.gif)
Właśnie tak zrobiłem, zamiast przekazywać wszystkie pliki - pobierać wawartość, mergować ją, obrabiać i zapisywać to pobieram liste plików i z każdego osobna. W teorii powinienem zyskać średnio 2-3 minuty na każde 1mln rekordów. Zobaczymy jak wyjdzie. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Raczej chodziło mi o to, żebyś mniejszymi segmentami pobierał i parsował, tj. pamięć jest zapchana tylko tyle, ile ma dany segment, a nie mniejszymi segmentami pobierać, żeby je wszystkie najpierw wrzucić i tak do pamięci, a dopiero później operować (IMG:style_emoticons/default/biggrin.gif)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 22:06 |