Pomoc - Szukaj - U¿ytkownicy - Kalendarz
Pe³na wersja: Zapis danych z parsowanych stron
Forum PHP.pl > Forum > PHP
KuKa
Witam. Mam taki problem,  musze wyciagnac dosc duzo informacji z roznych stron a potem to zapsiac do mysql. Mam przykladowo 101 000 rekordow do zapisania w jaki sposob napisac skrypt ktory by w miare szybko to zapisal do mysql. 

Do tej pory robilem to w ten sposob:

CODE


for($i=1; $i<=400; $i++)
{
  $zmienna=@file_get_contents("http://localhost/parser/slownik.php?akcja=W&strona=".$i."");
  preg_match_all('[<a href=\'one.php\?hid=(.+?)\'> (.+?)<\/a><\/td]is', $zmienna, $id_haslo);
  $ilosc=count($id_haslo[1]);
  $od=0;
  $do=($ilosc-1);
  for($x=$od; $x<=$do; $x++)
  {
  $haslo[$x]=file_get_contents("http://localhost/parser/one.php?hid=".$id_haslo[1][$x]);
  preg_match('[<br \/>(.+?)<br><br><br \/><br \/>]is', $haslo[$x], $tresc);
  $id[$x] = $id_haslo[1][$x];
  $haslo[$x] = addslashes($id_haslo[2][$x]);
  $tekst[$x] = addslashes($tresc[1]);
  }  
  $zapytanie="INSERT INTO slowa VALUES ('$id[0]', '$haslo[0]', '$tekst[0]'),";
  for($x=1; $x<=($do-1); $x++)
  {
  $zapytanie .= "('$id[$x]', '$haslo[$x]', '$tekst[$x]'),";
  }
  $zapytanie .= "('$id[$do]', '$haslo[$do]', '$tekst[$do]');";
  mysql_query($zapytanie) or die("Nie udalo sie wykonac zapytania");
  unset($tresc);
  unset($zapytanie);
  unset($haslo);
  unset($id);
  unset($tekst);
   
  echo "Strona ".$i." zgrana<br />";
}




<A href="\'one.php\?hid=(.+?)\'">



w petli for miele strony (na kazdej stronie jest 10 rekordow do zapisania), wiec zapisuje do mysql po jeden stronie. CO robie zle?? bo to mi strasznie dlugo zapisuje. Kazda rada sie przyda

em1X
poka¿ strukturê tabeli i podaj przyk³adowe dane jakie siê zapisuj±.
KuKa
Mowisz masz smile.gif :

struktura tabeli :

CODE
id int(10),

haslo VARCHAR(30),

text text;




przykladowe dane:

CODE
INSERT INTO `slowa` (`id`, `haslo`, `text`) VALUES

(68012, 'ABIOGENEZA', '\nproces powstawania istot ¿ywych z materii nieo¿ywionej; ju¿ w staro¿ytno¶ci Arystoteles twierdzi³, ¿e ¥ród³em powstawania niektórych organizmów s± procesy gnilne, np. ¿aby i wêgorze mia³yby powstawaæ z mu³u; teoria odrzucona w XVII/XVIII w. w wyniku badañ do¶wiadczalnych F. Rediego i L. Spallanzaniego; renesans idei nast±pi³ po odkryciu drobnoustrojów, definitywny jej schy³ek przynios³y odkrycia L. Pasteura; wspó³cze¶nie nie wyklucza siê pewnych form s. w najwcze¶niejszym etapie tworzenia siê ¿ycia na Ziemi.'),

(68014, 'ABBAS', '\npolityk algierski; 1938 za³. Algierskiej Unii Nar., d±¿±cej do uzyskania autonomii (w ramach republiki franc.); 1946 za³. Demokrat. Unii Manifestu Alg.; od 1955 cz³. Frontu Wyzwolenia Nar. (FWN); 1958-61 premier Tymczasowego Rz±du Republiki Algierskiej w Kairze, prowadz±cy rokowania z de Gaulle''m.; 1963 przew. Zgromadzenia Nar. (wprowadzi³ now± konstytucjê); w zwi±zku z przyjêciem przez FWN programu socjalizmu alg. wycofa³ siê z ¿ycia politycznego.'),

(68015, 'ABDANIEC', '\nszlachecki herb pol., odwrócona srebrna litera "M" na czerwonym polu; w XIII w. herb rodu rycerskiego Awdañców, nale¿±cy potem do przesz³o 100 rodzin, m.in. do Ankwiczów, Buczackich, Jaz³owieckich, Skarbków, a na Litwie Gaszto³dów.'),

(68043, 'ADCHEZJA', '\n glon gwiazdnica.'),

em1X
a ile przewidujesz rekordów dla klucza ID? unsigned mediumint nie wystarczy ?

1) mia³em raz generowane jakie¶ 9000 rekordów przez jeden skrypt i to w³a¶nie za du¿e pola a juz szczególnie integery strasznie spowalnia³y proces dodawania
2) mo¿esz generowac wieksze zapytania zamiast pojedynczych, np. z 50 na raz:

  1. INSERT INTO tabela (x,y,z) VALUES (0,0,0), (0,0,0), (0,0,0) ...
KuKa
Rekordow bedzie gdzies 102000 wiec troche zmienie ID.  A jak pozostala czesc, co tu mozna zrobic aby to szybciej sie zapisywalo? 
rzymek01
stwórz jedno zapytanie zamiast 400

spróbuj uruchomiæ to jako¶ równolegle/wielow±tkowo,
tzn. zrób 8 plików z tym kodem i ka¿demu daj np. po 50 (400/50 = 8 plików)
i uruchom jednoczesne smile.gif

nie sprawdza³em czy dzia³a, ale pisz±c aplikacje tego typu w c/c++ wiele po³±czeñ realizuje siê jednocze¶nie... mo¿na spróbowaæ
KuKa
ja w jednym zapytaniu wysylam 10 rekordow, ale jak trzeba bedzie to wysle wiecej
em1X
a sprawdza³e¶ czy zmiana struktury pomog³a? mierzy³e¶ czas?
KuKa
wczesniej mi zapisywalo 10 tys rekordow na jakies 3 godziny, zal smile.gif, ale juz z aktulanie parsowanej strony wszystko mi zapisalo, ale inne stronki czekaja <jej>. Teraz bede musial to cala baze ktora zajmuje przeszlo 100mb przeniesc na inny serwer, ktos zna dobry sposob smile.gif bo wymiekam smile.gif
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.