Juzek
27.10.2010, 09:16:31
Witam.
Otrzymałem 130MB plik .csv z zadaniem zaimportowania go do bazy MYSQL.
Problem w tym, że funkcje file, oraz file_get_contents odczytują cały plik co wywołuje zwrócenie błędu o przekroczeniu pamięci. Ustawienie w php.ini memory_limit na wartość graniczną stabilnej pracy serwera - też nie pomaga.
Rozwiązaniem problemu była by funkcja która w parametrach przyjmuje linie "od - do", której ma czytać plik. Coś jak SQL LIMIT .
(by nie tworzyć drugiego tematu):
Znacie jakieś programy, które radzą sobie z tak dużymi plikami na XP/7/Ubuntu ?
Próbowałem Wordem, Exelem, VIM'em, Geditem i openofficem - wszystkie albo się przywieszały (na windach) lub były killowane na Ubuntu.
Dziękuję z góry za rady.
Pozdrawiam i wracam na Google.
wookieb
27.10.2010, 09:19:03
1) fopen + fread (nie fgetcsv bo źle działa na utf) - przy złych wiatrach ta kombinacja tez może sie wysypać.
2) zaimportować bezpośrednio do mysql (google -> mysql csv import)
Juzek
27.10.2010, 10:04:26
1) sprawdzę
2) plik .csv nie zawiera informacji o tym do jakiej bazy/tabeli/kolumny ma wrzucić więc wątpię czy to się uda.
[EDIT]
Udało mi się w ten sposób:
- przerzuciłem plik na silniejszy serwer gdzie skrypt dorobił zapytanie
- wygenerował plik zapytania .sql ~500MB
- zaimportowałem plik .sql w konsoli
Pozdrawiam.
erix
27.10.2010, 14:40:43
Na phpclasses była kiedyś klasa do strumieniowego czytania plików CSV. Radziła sobie z tym zadaniem doskonale, ale linka nie jestem w stanie podać, bo nie pamiętam. [;
Gdzieś w archiwum to mam, ale skoro już sobie poradziłeś... [;
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.