![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 2 Dołączył: 25.04.2010 Ostrzeżenie: (0%) ![]() ![]() |
Hej,
trochę szukałem na ten temat, ale nie bardzo znalazłem zadowalającą mnie odpowiedź. Mianowicie: skrypt będzie uruchamiany co 2/3 dni, a może i codziennie, ale to nie ważne. Skrypt, będzie pobierał z bazy 'długi TEXT'. Ilość rekordów będzie z dnia na dzień rosła. Następnie treść zostanie przefiltrowana, zostaną wyciągnięte wszystkie linki. Ostatnim krokiem, każdy link zostanie sprawdzony curlem czy działa itp. Przy małej ilości wpisów w bazie, nie ma problemu, jednak przy większej już problem się pojawi. set_limit_time, tutaj nic nie pomoże, nawet gdy będzie resetowany w pętli, przy dłuższym czasie wykonywania pliku i tak serwer się wyłoży. Chodzi głównie o porcjowanie zapytań, na jakiej zasadzie to zrobić? header(), czy inne tego typu funkcje, w przypadku CRON'a nie wchodzą w grę. Ma ktoś jakieś rozwiązanie do tego? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Przy zapisywaniu wyciągaj adresy i pakuj je do osobnej tabeli z zapisanie ID wpisu w którym występuje i przelatuj przez tabelę z linkami oznaczając sobie czy działa czy nie.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 2 Dołączył: 25.04.2010 Ostrzeżenie: (0%) ![]() ![]() |
to i tak nic nie da.
Druga sprawa, dziś linki mogą działać, jutro nie muszą, więc tym bardziej niestety Twój pomysł tutaj nie pomoże. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Przecież jak w jednej tabeli masz np:
Kod id | teeeeext a w drugiej Kod id | id_wpisu | link | czy_dziala(bool) To w czym problem jest sprawdzanie drugiej tabeli pod kontem linków z czy_działa ustawionym na true? Jak nie działa to jego id zapisujesz sobie tymczasowo do tablicy i robisz mass update linków które nie dziają... |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 2 Dołączył: 25.04.2010 Ostrzeżenie: (0%) ![]() ![]() |
tym, że małą różnice mi zrobi, pobranie i przeliftrowanie czy odrazu pobranie linków, jezeli będzi ich np 20000000 rekordów.
Więc i tak będę musiał porcjować dane i tak. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Pobranie 2mln linków i tak będzie szybsze niż pobranie i przefiltrowanie 300k pól typu TEXT gdzie będzie sporo tekstu
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 2 Dołączył: 25.04.2010 Ostrzeżenie: (0%) ![]() ![]() |
masz rację, jednak pomijam fakt, że w moim wypadku to nie ma sensu rozbijać na dodatkową tabele.
i tak bym musiał dzielić cały skrypt na porcję i własnie dlatego założyłem temat ![]() |
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Jeśli chodzi o porcjowanie to dodałbym do tabeli pole ostatnie_sprawdzenie_dzien. W cronie co (powiedzmy) 10 minut odpalasz skrypt, który pobiera np. 50 rekordów, których ostatnie_sprawdzenie_dzien != date('j'). Sprawdzasz je po swojemu i aktualizujesz ostatnie_sprawdzenie_dzien na date('j'). Wiesz wówczas, że dany rekord został już dziś sprawdzony i każdy rekord będzie sprawdzony 1 raz na dzień.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 2 Dołączył: 25.04.2010 Ostrzeżenie: (0%) ![]() ![]() |
Właśnie zastanawiałem się nad takim rozwiązaniem.
Jednak jest jakaś mołżiwość, że w przypadku np. przeskanowania wszystkich danych z bazy, żeby dalsze polecenia cron się nie wypełniały? Albo od 2 strony, żeby 'aktualny' cron, gdy rozpozna, że jeszcze są dane do sprawdzenia, uruchomi następny? |
|
|
![]()
Post
#10
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Nie, nie ma takiej możliwości *. Ewentualnie możesz zadanie uruchamiać raz dziennie w nieskonczonej pętli. W niej zawrzesz pobieranie paczek danych, sprawdzanie, aktualizację. W momencie gdy skrypt pobierze 0 rekordów będzie to oznaczało, że zakończył pracę. Wówczas możesz dać exit. Pamiętaj tylko o wyzerowaniu czasu maksymalnego wykonania skryptu by mógł pracować w nieskonczoność (czyli do exit'a).
* W sumie możesz to obejść. W momencie zakończenia pracy zapisuj do pliku aktualny dzień (date('j')). Przy uruchomieniu zadania sprawdzaj najpierw czy wartość z tego pliku jest != date('j'). Jeśli tak - niech pracuje. Jeśli nie - dajesz exit. Zadanie fizycznie i tak będzie uruchamiało skrypt, ale przynajmniej nie będzie niepotrzebnie odpytywało bazy danych. |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 2 Dołączył: 25.04.2010 Ostrzeżenie: (0%) ![]() ![]() |
z tego co czytałem, i sprawdzałem, nawet jak się wyzeruje w pętli time_limit, to skrypt po pewnym czasie strasznie obciąży maszynę, co spowoduje albo wywalenie skryptu albo maszyny/strony.
Co do obsługi pliku bazy, w sumie 1 zapytanie na 10 min, to praktycznie nie jest taki problem. Teraz mi przyszło do głowy, że można pobawić się w DirectAdmin API. Teoretycznie podczas wykonywania skryptu usuwać aktualnego crona i w razie potrzeby dodawać następnego( z zastrzeżeniem by 1 cron o danej godiznie ciągle był). nie wiem jak by to w praktyce wyglądało. |
|
|
![]()
Post
#12
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat Teraz mi przyszło do głowy, że można pobawić się w DirectAdmin API. NIe przesadzasz z lekka?Teoretycznie podczas wykonywania skryptu usuwać aktualnego crona i w razie potrzeby dodawać następnego( z zastrzeżeniem by 1 cron o danej godiznie ciągle był). nie wiem jak by to w praktyce wyglądało. Cytat Co do obsługi pliku bazy, w sumie 1 zapytanie na 10 min, to praktycznie nie jest taki problem. Tak, to nie jest problem i lepiej na tym zdaniu sie zatrzymaj a oszczedzisz sobie zbednej durnej roboty
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 2 Dołączył: 25.04.2010 Ostrzeżenie: (0%) ![]() ![]() |
nie wiem czy przesadzam czy nie.
Jeżeli by to zaoszczędziło np. 600 zapytań dziennie, przy małym nakładzie pracy, to jest już jakaś liczba. |
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
taaa.. zwłaszcza że wykonanie takiego zapytania sprawdzającego zajmie powiedzmy w pesymistycznym układdzie 0.01s to zaoszczędzisz 6s, Brawo
![]() |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 2 Dołączył: 25.04.2010 Ostrzeżenie: (0%) ![]() ![]() |
a co ma czas do tego?
Kwestia niepotrzebnych zapytań do bazy, a nie czas który kompletnie nie ma znaczenia. Ps. Widzę, każdy łatwo się tu niepotrzebnie spina, więc na święta polecam jakąś maść na ból pośladków ![]() WESOŁYCH ŚWIĄT ![]() |
|
|
![]()
Post
#16
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Jedyna osoba, ktora tutaj ewentualnie sie spina, jestes Ty bo u nikogo innego spinania ja osobiscie nie widze. Powodzenia wiec w nakladaniu tej masci
![]() -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#17
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Ja nie szukałbym problemu w czasie wykonania zapytania, a nawiązywaniu zbędnych połączeń z bazą danych. Może 1 tu czy tam nie robi większej różnicy, ale skoro można stosunkowo niewielkim nakładem pracy to wyeliminować to czemu nie?
|
|
|
![]()
Post
#18
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
phpion ja sie bardziej odnosilem do pomyslu autora, ktory chcial sie bawic api directadmin.... toz to tylko wiecej szkody moze zrobic jak pozytku a odpalanie crona z jednym połączeniem do bazy raz na 10 minut to cale nic.
No i jeszcze te "spinanie" sie.... Od kiedy napisanie, ze dany pomysl nie dokonca ma sens jest spinaniem sie? @mis, to jak tam, masz zapasy tej masci? ![]() -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 2 Dołączył: 25.04.2010 Ostrzeżenie: (0%) ![]() ![]() |
@phpion wlaśnie o to mi chodziło, że nie czas a ilość zapytań ma znaczeie. Przy paru komendach do DA Api, można to prosto rozwiązać.
@up, czy więczej szkody czy pożytku, to kwestia sporna. 'Niewielki nakład pracy', o którym wspomniał phpion, to właśnie użycie DA Api więc? No tak, mój pomysł jest be ;P Co do Twoich wypocin wyżej, wlaśnie to co napisałeś to jest spinanie się o nic. Forum jest do rozmów, a takie jak to, czyli tematyczne po pomocy, ale widzę jak wszędzie 'władza' uderza do głowy i każdy głupio mądry stara się być, szukając bezsensownych spin i/lub pokazując innym 'Co to nie ja'. Wyluzujcie trochę. Pewnie dostanę ostrzeżenie, ale to nic ![]() Jeszcze raz wesołych świąt. Temat można zamknąć, dzięki za pomoc. Ten post edytował mis 20.12.2013, 21:12:22 |
|
|
![]()
Post
#20
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat Forum jest do rozmów A inni co mają inne zdanie niz Ty to zaprzeproszeniem co robią? Szczekają?Napisalem i Pyton ze gra nie jest warta swieczki a juz szczegolnie przy twoim pomysle. To byla rozmowa ale nie zgadzala sie z Twoja wiec wyjezdzasz z jakims durnym spinaniem sie.... ogarnij sie chlopie i zbieraj te masc bo widze przyda ci sie duzo ![]() Cytat Temat można zamknąc Alleluja ![]() -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 2.07.2025 - 01:13 |