![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 121 Pomógł: 0 Dołączył: 3.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam. Mam fragment kodu w którym dana funkcja w w pętli for nawet do 7 000 razy. Moje pytanie brzmi czy można jakoś przyspieszyć wywoływanie tej funkcji. Można by zrezygnować z samej funkcji i wkleić kod w for ale to rozwiązanie nie wchodzi w grę. Czy istnieje coś takiego jak w funkcja inline w C++ (IMG:style_emoticons/default/questionmark.gif) Z góry dzięki za odpowiedzi.
|
|
|
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Jak napiszesz biblioteke do php-a to czemu nie. Prostszego sposobu nie ma. A co to za funkcja?
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 121 Pomógł: 0 Dołączył: 3.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
Mam funkcje która przyjmuje 2 argumenty stringi. Na podstawie tych strinów pobieram z bazy danych kilka tyś rekordów które filtruje napisanymi przeze mnie algorytmami. A następnie 'prawidłowych ' rekordów zwracam w postaci tablicy. Te czynności wyżej opisane wykonuje nawet do 7 000 ciągiem. wiec zależy mi żeby to jakoś przyspieszyć. Na mocnym serwerze operacje te nawet wykonują się przez 10 min. Algorytmy nie jestem już w stanie przyśpieszyć wiec szukam innych rozwiązań. W ciele tej funkcji wywołuje także inne funkcje wiec całość. Jest naprawdę obciązona
|
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Nawet gdyby ten kod nie był w funkcji a w ciele pętli to ogromnego wzrostu wydajności się nie spodziewaj. 1s nawet nie zyskasz.
Musiałbyś raczej pokazać co to za algorytm. Sprawdzić: 1) Czy zapytania wywołują się odpowiednio szybko 2) Upewnić się czy NA PEWNO nie możesz usprawnić algorytmu 3) Czy optymalnie zaprojektowałeś bazę Jeżeli będziesz podawał kod funkcji lub opisywał algorytm tutaj na forum to zrób to dokładnie, żebyśmy nie musieli pisać tysiąca postów aby "rozgryźć" co chcesz uzyskać. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 561 Pomógł: 72 Dołączył: 15.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
To nie funkcja jest tutaj problemem ale ilość zapytań do bazy, nie robi się zapytań do bazy w pętli... a już na pewno nie takiej która się wykonuje 7k razy (IMG:style_emoticons/default/smile.gif) Nie wiem dokładnie jak działa Twoja funkcja, ale podejrzewam, że można to załatwić mniejszą ilością zapytań. W tej pętli możesz zamiast zapytań np zrobić sobie listę id rekordów z którymi chcesz coś zrobić (w takiej postaci: "12, 42, 53, 65") A później zrobić jedno zapytanie poza pętlą: 'SELECT xxx FROM xxx WHERE id IN ($lista_id)'. Rozwiązań jest wiele, ale nikt Ci nie udzieli jednoznacznej odpowiedzi jak nie wkleisz kodu.
pozdr. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 121 Pomógł: 0 Dołączył: 3.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
No więc tak mam tabele detal której dane należy przetworzyć i wyniki zachować w innej tabeli. Tabela detal zawiera pola tytuł i artysta. Są to atrybuty typu VARCHAR. Detal wchodzi w skład listy. Detali w liście może być nawet do 7 000. Pobieram wszystkie detale danej listy (po kluczu obcym). A następnie wykonuje w for przetworzenie kolejnych detali. Przetworzenie polega na porównaniu każdego detalu (pola tabeli tytuł artysa) z tabelą zawierającą bazowe nagrania. Pola tytuł artysta mają być porównywane bez uwzględniania polskich znaków oraz ich wielkości. Pola są porównywane za pomocą metody n-gramów. W tym wypadku jest to trigram. Cały ciąg jest rozbijany na 3-literowe ciągi które trzeba porównać z rekordami w tabeli bazowej nagrań. Zawęziłem pole przeszukiwań do ciągów o zbliżonej długości znaków. Założeniem funkcji jest określenie procentowego podobieństwa detalu do nagrania bazowego. Jeśli przekroczy ono pewny próg nagrnie zostaje to tablicy która następnie jest zwracana z funkcji.
Funkcja usuwająca polskie znaki:
Funkcja dzieląca ciąg na trójki
Funkcja stannowiąca wąskie gardło (część 1):
czesc 2:
czesc 3:
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 06:51 |