Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ładowanie duzych danych w php
Forum PHP.pl > Forum > PHP
macdavido
Witajcie,
mam taki problem
jest plik CSV zawierający 21 kolumn i bardzo dużą ilość pozycji (jakies 38 tysięcy). Napisałem filtr i skrypcik który ładnie to wrzuca do bazy. Lecz niestety ale zrywa wrzucanie danych w różncyh losowych miomentach. Czasem pozycja 880 albo 1920-a itd. Czy to jakieś przeciążenienie czy coś innego co nie uwzględniłem. Procedura na początku nawiązuje połączenie, potem w pętli while wrzuca po kolei dane a na koniec zamyka połączenie. Plik CSV znajduje się na serwerze tam gdzie odpalany jest skrypt do przerzucenia danych na MySQL.

Znacie ten problem? możecie wspomóc radą?

Pozdrawiam
MacDavido
athabus
a próbowałeś load data infile?
macdavido
a tego nie znam :-O
mozesz cos przytoczyc?
nospor
oj... ale co tu przytaczac?
http://www.google.com/search?client=opera&...=utf-8&oe=utf-8
i juz pierwszy link.

Co do twego problemu: zapewne ci sie skrypt za dlugo wykonuje wiec jest przerywane. walenie tylu tysiecy zapytan nie jest optymalnym pomyslem. powinienes wrzucac dane do zapytania po klika rekordów. liczba zapytan spadnie troche
mariuszn3
Rozszerzenie mysqli ma funkcję multi_query i przez to możesz aplikować wiele insert'ów na raz, jest to dużo szybsze niż pojedyńcze wywołania query, też poprzez mysqli możesz wysyłać skompresowane dane.
Miałem ten problem kiedyś i generalnie trzeba limitować ilość zapytań na przeładowanie (też wszystko zależy od serwera, jedne odmówią współpracy wcześniej inne później.)
Nie mniej używając mysqli_multi_query mogłem dodawać znacznie więcej danych na raz niż poprzez zwykłe query.
macdavido
-> nospor
dzieki za info, sprobowalem ale chyba nie rozumiem
oto co robie:
na poczatek baza jest pusta wiec dla treningu tworze sobie w php zapytanie tworzace tablice:

  1. <?php
  2. $wyn = mysql_query("CREATE TABLE test21 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, joke TEXT NOT NULL)");
  3. ?>


dziala to poprawnie bo na adminie widze ze tablica powstala
jest to jak widac jedna kolumna typu INT(11) oraz druga typu TEXT, tej pierwszej nadaje AUTO_INCREMENT i PRIMARY. Do zmiennej $wyn dostaje 1 czyli OK smile.gif

Nastepenie robie tak:

  1. <?php
  2. $wyn = mysql_query("LOAD DATA INFILE '/database/test.csv' INTO TABLE test21 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY 'n'");
  3. ?>


w folderze database mam plik test.csv (na serwerze) no i probuje go tutaj zaladowac ale lipa. Nie ma efektu i chyba nie rozumiem co i jak bo wzialem to z przykladow Twojego linka. A oto plik test.csv:

"1","a string","100.20"
"2","a string 2","102.20"
"3","a string 3","104.20"
"4","a string 4","110.20"


Jak juz mi to pojdzie to bede mial 21 kolumn i tysiace wierszy. Ehhhhm zeby wreszcie cos pomoglo.

-> mariuszn3

:-) tez za chwile sprawdze moze to mam i cos sie uda chyba ze zaraz w depresje wpadne
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.