![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 384 Pomógł: 13 Dołączył: 16.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Mam plik csv który zajmuje 140 MB, serwer nie daje rady jest "Out of memory" i zastanawiam sie czy nie da sie jakos partiami wczytywac pliku zeby tylko jego czesc byla w pamieci a pozniej kolejna czesc odczytac i przerobic ? Ewentualnie jakis inny sposob, jestem w kropce, juz 2 godziny nad tym siedze ... w komentarzach w manualu znalazlem klase CsvImporter która niby to robi, ale jak odczytam przed tym plikiem jakis jeszcze wczesniej, to tez mam "Out of memory". Moze daloby sie przerobic jakos ta klase zeby nie zajmowala tyle pamieci ?
-------------------- |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 965 Pomógł: 285 Dołączył: 19.06.2015 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 384 Pomógł: 13 Dołączył: 16.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Widziałem to rozwiązanie, tylko problem jest taki że ... nie do końca je rozumiem ... funkcja pobiera część pliku i go obrabia i idzie dalej, to wiem z opisu, ale gdzie wkleic swoj kod. Bylbym wdzieczny za wskazanie miejsca albo wytlumaczenie tego dokladniej
-------------------- |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 965 Pomógł: 285 Dołączył: 19.06.2015 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Jeśli jako $callback przekazesz nazwe funkcji stworzonej przez siebie to zostanie ona wykonana z parametrami z array(fread($handle,$chunk_size),&$handle,$i)) Ten post edytował kapslokk 17.12.2015, 11:39:32 |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 2 355 Pomógł: 533 Dołączył: 15.01.2010 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 655 Pomógł: 73 Dołączył: 2.05.2014 Ostrzeżenie: (0%) ![]() ![]() |
Ja parsuje kilka plików .csv po 300-400MB każdy. PHP nie daje rady
![]() Zaciągnąłem node.js, wielowątkowość i czas na jeden plik: PHP - 20-30 minut node.js - 20-30 sekund cóż.. nie do wszystkiego PHP się nadaje ![]() -------------------- Overwatch24 - najbardziej zaawansowany Polski portal Overwatch od fanów dla fanów.
Fachowo.co Behance.net/fachowo |
|
|
![]()
Post
#7
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Nie prościej wrzucić dane do bazy danych (chociażby do tabeli tymczasowej) za pomocą LOAD DATA? Poleci to migusiem, a co potem z tymi danymi zrobisz (przeformatujesz, przeniesiesz do właściwej struktury) to już Twoja sprawa, a całość i tak robisz na poziomie bazy danych.
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 384 Pomógł: 13 Dołączył: 16.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Musiałbym to robić ręcznie, a zalozenie jest takie zeby to zautomatyzowac. Mam pare takich plikow ktore musze aktualizowac raz na jakis czas i beda dochodzic nowe.
-------------------- |
|
|
![]()
Post
#9
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Ale co byś musiał robić ręcznie?
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 60 Pomógł: 10 Dołączył: 17.11.2011 Ostrzeżenie: (0%) ![]() ![]() |
Rozwiązanie, które podał @phpion wygląda najsensowniej (przynajmniej z mojej perspektywy). Od razu również dziękuje za ten pomysł (zoptymalizuje dzięki temu projekt).
![]() |
|
|
![]()
Post
#11
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Dodam tylko jeszcze, że osobiście z dane z pliku wrzucam do tabeli tymczasowej o wszystkich kolumnach tekstowych. Dopiero potem przekształcam dane (np. w CSV mam liczbę jako 200 000,50 co przekształcam na 200000.50), zmieniam typy kolumn na właściwe (z tekstowych na np. numeryczne), usuwam nieprawidłowości w danych (np. potencjalne naruszenia kluczy obcych) itd. Dopiero mając w ten sposób obrobione dane przenoszę je do tabel właściwych.
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 384 Pomógł: 13 Dołączył: 16.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
@phpion dzięki za super solucje. W wolnym czasie sprawdzę, ale rozwiazanie wydaje sie najlepsze. Rozumiem ze pozniej z tymczasowej pobierasz dane przez php, obrabiasz i przerzucasz partiami. Super.
@phpion jeszcze raz dzięki za takie rozwiązanie, właśnie je testuje, ale mam problem z jednym. W bazie mam powiedzmy 10 kolumn a w csv powiedzmy 25, jak teraz przypisac odpowiednie wartosci do kolumn ?
nizej moge dac liste kolumn, ale to sa kolumny w bazie danych, moge wiec jakas ominac, ale jak uzywajac SET przypisac odpowiednie kolumny z csv do odpowiednich kolumn do bazy danych ? Troche dla mnie nie zrozumiale uzywanie @ w tym poleceniu :/ -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 25.07.2025 - 09:47 |