![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 39 Pomógł: 0 Dołączył: 9.09.2011 Ostrzeżenie: (10%) ![]() ![]() |
Witam
Napisałem integracje z azymut.pl, niestety sama aktualizacja cen trwa kilka godzin. Czy można jeszcze zoptymalizować kod aby aktualizacja trwała krócej? Tabela z produktami ma 91 026 rekordów i waży 78,6 MB Plik xml waży 4,9M i ma 76960 linii. Struktura pliku: <?xml version="1.0" encoding="ISO-8859-2"?> <!DOCTYPE prices SYSTEM "http://services.azymut.pl/oferta/price.dtd"> <prices updated="2011-12-16 17:45:38"> <book indeks="00124700100KV" cena="15.41" vat="23" detal="24.61" /> <book indeks="00130100101KA" cena="10.06" vat="23" detal="16.49" /> <book indeks="00151500101KS" cena="8.25" vat="5" detal="11.55" /> <book indeks="00171000105KS" cena="30.8" vat="5" detal="42.0" /> <book indeks="00195900101KS" cena="9.75" vat="5" detal="13.65" /> <book indeks="00204500101KS" cena="15.0" vat="5" detal="21.0" /> <book indeks="00226800101KS" cena="9.75" vat="5" detal="13.65" /> ......... <book indeks="8DB70601415KS" cena="14.93" vat="5" detal="20.9" /> <book indeks="8DB70701415KS" cena="22.43" vat="5" detal="31.4" /> <book indeks="8DB70801415KS" cena="22.43" vat="5" detal="31.4" /> <book indeks="8DB70901415KS" cena="22.43" vat="5" detal="31.4" /> <book indeks="8DB73101415KS" cena="16.43" vat="5" detal="23.0" /> <book indeks="8DB73201415KS" cena="16.43" vat="5" detal="23.0" /> <book indeks="9PA00301415KS" cena="13.61" vat="5" detal="285.8" /> <book indeks="9PA00401415KS" cena="15.0" vat="5" detal="21.0" /> <book indeks="9PB00101415KS" cena="13.5" vat="5" detal="18.9" /> <book indeks="9PB00201415KS" cena="13.5" vat="5" detal="18.9" /> </prices> Kod php do obsługi pliku:
Aktualizacja bazy oparta jest o klasę obsługującą PDO Bardzo prosiłbym o uwagi. // Edit Puściłem aktualizacje o 2011-12-16 18:28:15 i do godziny 2011-12-16 19:23:01 zaktualizował 6 448. Ten post edytował einter-project 16.12.2011, 19:49:28 |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) ![]() ![]() |
Powinieneś zacząć od pomierzenia czasów, wtedy wiedziałbyś który kawałek kodu opóźnia cały skrypt, tak trzeba gdybać.
Winne mogą być indeksy na tabeli - rozwiązaniem może być ich wyłączenie na czas aktualizacji. Możesz też skorzystać z transakcji i aktualizować rekordy po kilka "w paczce", coś jak tutaj. W chwili obecnej aktualizujesz wszystkie rekordy, nawet te które się nie zmieniły. Ostatnia możliwość, to przygotowanie pliku sql i wrzucenie go do bazy (np. przez konsolę). |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 39 Pomógł: 0 Dołączył: 9.09.2011 Ostrzeżenie: (10%) ![]() ![]() |
Pobawiłem się trochę skryptem i na pewno to wina PDO że tak wolno działa.
Mam teraz do was pytanie które zapytanie będzie bardziej wydajne, najmniej obciąży serwer i które byście zastosowali na takiej dużej bazie: Opcja 1
Opcja 2
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1. Jak już @destroyerr zauważył obejmij całość transakcją albo wyłącz indeksowanie na czas aktualizacji - w chwili obenej niepotrzebnie każdorazowo przebudowywany jest indeks.
2. Użyj PDO i prepared statements - nie ma potrzeby w kółko "przesyłać całego zapytania". |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 39 Pomógł: 0 Dołączył: 9.09.2011 Ostrzeżenie: (10%) ![]() ![]() |
Witam
Powróciłem dzisiaj do tematu: Od Crozina dostałem taki oto kodzik:
I wyskakuje mi taki błąd: Call to undefined method PDO::prepareStatement() Czy można prosić o pomoc czy nazwa funkcji PDO jest prawidłowa? Pozdrawiam |
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 39 Pomógł: 0 Dołączył: 9.09.2011 Ostrzeżenie: (10%) ![]() ![]() |
Dzięki nospor ale czytałem, z tym że od Crozina dostałem taki oto kodzik:
Napisałem:
Wydaje mi się że dobrze napiałem, według jego przykładu. Ewentualnie jeśli byś mógł napisać co jest nie tak, a nie linkować to byłbym wdzięczny. Pozdrawiam |
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
1) Nie widzę w tym temacie, byś od crozina dostawał jakikolwiek kod.
2) prepareStatement() - nie ma takiej funkcji 1+2 = ktoś tutaj klamie Podałem ci linka do manuala, z którego jasno wynika że jest funkcja prepare(). Zamiast się więc upierać przy prepareStatement() to posłuchaj co ci mówi komunikat błędu połącz to zlinkiem co ci dałem i zrób prostą poprawkę. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 39 Pomógł: 0 Dołączył: 9.09.2011 Ostrzeżenie: (10%) ![]() ![]() |
Nie rozumiem po co piszesz jak nie chcesz pomóc.
1) dostałem na pw, istnieje coś takiego na tym forum 2) wiem że nie ma takiej funkcji, dlatego piszę co jest nie tak Chyba sobie poradziłem więc dzięki za wysiłek. |
|
|
![]()
Post
#10
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat Nie rozumiem po co piszesz jak nie chcesz pomóc. Dałem ci linka do rozwiązania. Nie moja wina, że nie umiesz połączyć dwóch prostych faktów ze sobą wiec nie pisz, że nie chcę pomoc.Cytat wiem że nie ma takiej funkcji, dlatego piszę co jest nie tak Dlatego podałem ci linka, który wyjaśnia co jest nie tak :/edit: a z tym kłamaniem to nie napisałem o kogo mi chodzi ![]()
Powód edycji: [nospor]:
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 21:33 |