2013-02-11 15 views
19

Muszę aktualizować swoją bazę danych MySQL co godzinę, a ja zastanawiałem się, jakie są zalety/wady używania cronjob VS w wydaniu MySQL? Na przykład, który jest szybszy? Który jest bezpieczniejszy? Dzięki!Cronjob lub wydarzenie MySQL?

+0

możliwe duplikat [Mysql spustowych/wydarzenia vs cron] (http://stackoverflow.com/questions/1734073/mysql-trigger-events-vs-cronjob) – bipen

Odpowiedz

14

Chciałbym zawsze iść zadanie cron, ponieważ:

  • to gdzie administratorzy będą oczekiwać, że będzie (ten punkt nie do przecenienia)
  • crobtab jest kuloodporne, sprawdzone, bardzo szeroko używany i zrozumiany
  • Możesz dowolnie kierować/analizować komunikaty o błędach/sukcesach, gdzie chcesz
  • Niektóre zadania bazy danych wymagają/preferują mysql do off-line (np. pełna kopia zapasowa), więc musisz użyć crona dla tych - złym pomysłem jest wykonanie niektórych zadań za pomocą crona, a niektóre za wykonanie z mysql; będziesz pewien, gdzie szukać
  • możesz połączyć się inne imprezy, które powinny przestrzegać jeśli masz skrypt powłoki

I wreszcie, tylko dlatego, że może coś zrobić, nie oznacza, to dobry pomysł. MySQL jest dobry w danych. Nie używaj go do rzeczy "skorupowych".

+0

Właściwie, jeśli zmiana jest tylko kwestią danych, sensownym jest umieszczenie go w SQL: to zadanie SQL, aby upewnić się, że dane są "w porządku" (dostępne, aktualne, zoptymalizowane, itp.), więc pozwalając zdarzeniu MySQL wyczyścić dane, optymalizować, lub terapie w ich wydarzeniach mają sens. – Xenos

+0

@Xenos tylko dlatego, że technologia * może * robić coś nie znaczy, że powinna. W tym przypadku utrzymanie danych jest kwestią * operacyjną *, więc * operacyjne * rozwiązanie jest najbardziej odpowiednie. Tylko dlatego, że zadanie wymaga wykonania SQL, nie oznacza, że ​​baza danych powinna również zarządzać zadaniem okresowego żądania wykonania tego SQL. To także nie jest przenośne. – Bohemian

17

Harmonogram zdarzeń MySQL - Dobry zamiennik crona.

Wszyscy wiemy o cronie, łatwym sposobie planowania pewnych procesów, np. Skracania tabel logów w bazie danych MySQL co tydzień.

Wraz z MySQL 5.1 faceci z MySQL wprowadzili nową ciekawą funkcję: Harmonogram zdarzeń MySQL!

Za pomocą Harmonogramu zdarzeń można zaplanować zadania, które chcesz wykonać w bazie danych. Jest to idealne rozwiązanie dla programistów internetowych, którzy nie mogą tworzyć zadań cron na swojej przestrzeni internetowej, ponieważ ich host nie pozwala im! To naprawdę świetny zamiennik dla crona!

Kilka przykładów:

chcesz obciąć tabelę dziennika aplikacji każdy tydzień, to jest jak twój harmonogram zdarzeń powinna wyglądać następująco:

CREATE EVENT PurgeLogTable 
ON SCHEDULE EVERY 1 WEEK 
DO 
BEGIN 
DELETE FROM `logs` WHERE `LogTime` <= DATE_SUB(CURRENT_TIMESTAMP,INTERVAL 1 WEEK); 
INSERT INTO `audit` (`AuditDate`, `Message`) VALUES(NOW(), "Log table purged succesfully!"); 
END 
8

Mysql przedstawić harmonogram imprezy, które możemy wykorzystać alternatywę Cronjob. Istnieje wiele zalet w porównaniu z cronjob jak:

1) Jest on bezpośrednio zapisany na serwerze Mysql.

2) To jest niezależne od platformy. Twoja aplikacja może być napisana w dowolnym języku, który nie ma znaczenia. Musisz tylko znać mysql.

3) Możemy z nich korzystać, gdy wymagana jest aktualizacja bazy danych lub czyszczenie w regularnych odstępach czasu.

4) Nie trzeba kompilować zapytań za każdym razem, gdy zwiększy się wydajność.

5) Błąd może być rejestrowany w plikach dziennika. Składnia:

DELIMITER // 
CREATE EVENT eventName 
ON SCHEDULE EVERY 1 WEEK 
STARTS 'Some Date to start' 
ENDS 'End date If any' 

DO 
BEGIN 
    // Your query will be here 
END// 
DELIMITER ; 

Więcej informacji można odwiedzić oficjalną stronę: http://dev.mysql.com/doc/refman/5.1/en/create-event.html

szczegółowości blog: http://goo.gl/6Hzjvg

0

Mysql wydarzenie scheduler jest na korzyść dla środowiska udostępnionym hosta. Pod względem czasu można go również zaplanować na sekundę. W przeciwieństwie do crona, jest to z minuty na minutę - ale możesz obejść to ograniczenie.

1

idę z imprezy mysql cedularny

bo nie trzeba kodować jeden dodatkowy plik dla niej, naszym celem mogą być spełnione tylko przez pisanie jednego zapytania.

jeśli wymagana jest tylko operacja związana z bazą danych, wówczas dobrym wyborem jest mysql event schedular.

0

Proszę sprawdzić poniższy kod:

if ($product_info) { 
    if ($product_info['image']) { 
     $image = $this->model_tool_image->resize($product_info['image'], $this->config->get($this->config->get('config_theme') . '_image_wishlist_width'), $this->config->get($this->config->get('config_theme') . '_image_wishlist_height')); 
    } 
    else { 
     $image = false; 
    } 
} 
0

pracuję z wydarzeniami sobie teraz i rozważała taką samą :)

Oprócz powyższych odpowiedzi:

  • użytkowania ZDARZENIA, jeśli zadanie jest czysto zorientowane na dane lub uzupełnia funkcjonalność już wbudowaną w bazę danych. Możliwe, że masz już wyzwalacze, które czyszczą dane, rejestrują określone zdarzenia, agregują określone dane itp. Jeśli zaplanowane zadanie, które chcesz wykonać, jest częścią istniejącego projektu, bardziej spójne jest wyzwalanie zadania od zdarzenia. EVENTy to czasowe wyzwalacze.

  • Jeśli uruchamiasz skrypt z powłoki, potrzebujesz nazwy użytkownika/hasła zapisanych w skrypcie powłoki lub pliku domyślnym. W celu wykonania ZDARZEŃ po utworzeniu ZDARZENIA nie potrzebujesz nazwy użytkownika/hasła.

  • IMCO powinieneś napisać logikę w procedurze przechowywanej; następnie wywołaj procedurę z wydarzenia lub ze skryptu powłoki, co Ci najbardziej odpowiada. Możesz nawet zbudować miejsce w interfejsie użytkownika, które umożliwi użytkownikom ręczne wywoływanie procedury.

+0

Sformatuj nieco treść, byłoby lepiej, gdyby wyglądało dobrze. – Billa