Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zapis danych z parsowanych stron
KuKa
post
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.03.2008

Ostrzeżenie: (0%)
-----


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

Go to the top of the page
+Quote Post
em1X
post
Post #2





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

Ostrzeżenie: (0%)
-----


pokaż strukturę tabeli i podaj przykładowe dane jakie się zapisują.

Ten post edytował em1X 23.07.2008, 13:11:58
Go to the top of the page
+Quote Post
KuKa
post
Post #3





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.03.2008

Ostrzeżenie: (0%)
-----


Mowisz masz (IMG:http://forum.php.pl/style_emoticons/default/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.'),

Go to the top of the page
+Quote Post
em1X
post
Post #4





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

Ostrzeżenie: (0%)
-----


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) ...


Ten post edytował em1X 23.07.2008, 14:15:12
Go to the top of the page
+Quote Post
KuKa
post
Post #5





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.03.2008

Ostrzeżenie: (0%)
-----


Rekordow bedzie gdzies 102000 wiec troche zmienie ID.  A jak pozostala czesc, co tu mozna zrobic aby to szybciej sie zapisywalo? 
Go to the top of the page
+Quote Post
rzymek01
post
Post #6





Grupa: Zarejestrowani
Postów: 592
Pomógł: 62
Dołączył: 3.08.2006

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/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ć
Go to the top of the page
+Quote Post
KuKa
post
Post #7





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.03.2008

Ostrzeżenie: (0%)
-----


ja w jednym zapytaniu wysylam 10 rekordow, ale jak trzeba bedzie to wysle wiecej
Go to the top of the page
+Quote Post
em1X
post
Post #8





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

Ostrzeżenie: (0%)
-----


a sprawdzałeś czy zmiana struktury pomogła? mierzyłeś czas?
Go to the top of the page
+Quote Post
KuKa
post
Post #9





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 24.03.2008

Ostrzeżenie: (0%)
-----


wczesniej mi zapisywalo 10 tys rekordow na jakies 3 godziny, zal (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) bo wymiekam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 23:35