![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 65 Pomógł: 4 Dołączył: 6.09.2007 Ostrzeżenie: (0%) ![]() ![]() |
Hej,
Co prawda aplikacja jest napisana w C (z wykorzystaniem MySQL API) a nie w PHP, ale problem tkwi po stronie MySQL-a stad pisze tutaj a nie na forum C/C++. Program ktory napisalem, ma wrzucac informacje z przeparsowanego pliku tekstowego do bazy danych, problem polega tylko na tym, ze tych danych jest sporo (stad wybralem C a nie PHP). Sprobowalem wrzucic dane tylko z 1 pliku co daje ~ 3487 zapytan do bazy danych i program wykonywal sie przez prawie 3 minuty! Co przy ponad 500 plikach daje wiecznosc (IMG:style_emoticons/default/wink.gif) . No ale pomyslalem, ze moze jest to wina braku optymalizacji programu, wiec postanowilem napisac cos takiego:
gdzie tabela to:
Kod pisalem z pamieci (nie mam teraz dostepu do zrodla programu) wiec moga gdzies byc byki, ale chcialem przekazac tylko sens. Okazalo sie, ze przedstawiony wyzej kod tez wykonuje sie w granicach 3 minut ;/. Mieliscie kiedys podobna sytuacje? Dlaczego tak sie dzieje? Jak to naprawic? Dziekuje za wszelka pomoc, pozdrawiam MD |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 65 Pomógł: 4 Dołączył: 6.09.2007 Ostrzeżenie: (0%) ![]() ![]() |
@nospor && @wookieb -> sprobuje (IMG:style_emoticons/default/wink.gif)
@thek Ad.1 byc moze, ale malo prawdopodobne bo wszystkie pliki maja ~ 40MB (a jest ich nieco ponad 500) Ad.2 nawiazuje tylko 1 polaczenie przez caly czas pracy programu Ad.3 nie, bo zrobilem tak, jak to napisalem w 1 poscie zeby to sprawdzic ---------------------------------------------------------------------------------------- EDIT 2011.06.09 10:17 Zmodyfikowalem wczoraj kod i zaimplementowalem tranzakcje -- 10 000 zapytan poszlo w 1.5s, gdzie wczesniej przypominam ~3500 zapytan wrzucalo sie do bazy w 3 minuty (IMG:style_emoticons/default/wink.gif) Dzieki! A teraz kolejne pytanie ... skoro puszczam kilka insertow na raz, w takim razie w jaki sposob moge wyznaczyc maxymalny limit zapytan w trakcie jednej tranzakcji? Przy takim kodzie jaki zaprezentowalem w pierwszym poscie (tylko z wykananiem zapytania PRZED petla "START TRANSACTION" i ZA petla "COMMIT") wczoraj i 100 000 zapytan poszlo w 14s, ale co gdy zapytanie jest bardziej udziwnione? Jak mozna to "wyliczyc"? Przypuszczam, ze ma tutaj znaczenie zmienna max_allowed_packet (w my.conf -- u mnie standardowo 16M), no ale jak wyliczyc ile zapytan da te 16M? Pozdrawiam MD Ten post edytował MiChaSSs 9.06.2011, 09:17:26 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 17.10.2025 - 02:05 |