2013-02-11 25 views
19

Ich muss jede Stunde meine MySQL-Datenbank aktualisieren, und ich frage mich, welche Vorteile/Nachteile die Verwendung eines Cronjobs VS ein MySQL-Ereignis? Zum Beispiel, was ist schneller? Was ist sicherer? Vielen Dank!Cronjob oder MySQL Event?

+0

möglich Duplikat [Mysql Trigger/Ereignisse vs Cronjob] (http://stackoverflow.com/questions/1734073/mysql-trigger-events-vs-cronjob) – bipen

Antwort

14

Ich würde immer ein Cron-Job gehen, denn:

  • Das ist, wo sysadmins wird erwartet, dass es sein (dieser Punkt ist nicht zu unterschätzenden)
  • crobtab ist kugelsicher, bewährte, Einige Datenbank-Aufgaben erfordern/mysql bevorzugen off-line zu sein (zB voll-Backup) extrem weit verbreitet und verstanden
  • Sie können frei direkt/analysieren Fehler/Erfolgsmeldungen, wo Sie
  • wollen, so du hast cron verwenden für diejenigen - es ist eine schlechte Idee, einige Aufgaben mit Cron zu erledigen und einige erledigt zu haben mit mysql; Sie werden sich nicht sicher sein, wo
  • Sie können andere Ereignisse schauen zu verketten, die folgen sollten, wenn Sie ein Shell-Skript

Und schließlich haben, nur weil man kann etwas tun, bedeutet nicht, Es ist eine gute Idee. Mysql ist gut im Datenkram. Benutze es nicht für "Shell" Zeug.

+0

, Eigentlich, wenn das Update ist nur noch eine Frage von Daten macht es Sinn, es in die SQL zu setzen: Es ist der SQL-Job, um sicher zu sein, dass Daten "OK" sind (zugänglich, aktuell, optimiert, usw.), damit MySQL-Ereignisse die Daten bereinigen, Optimierungen, oder Behandlungen in ihren Veranstaltungen machen Sinn. – Xenos

+0

@Xenos nur weil eine Technologie * etwas tun kann, heißt es nicht, dass es sollte. In diesem Fall handelt es sich bei der Datenhaltung um ein * operatives * Problem, daher ist eine * operative * Lösung am besten geeignet. Nur weil die Aufgabe erfordert, dass SQL ausgeführt wird, heißt das nicht, dass die Datenbank auch die Aufgabe verwalten sollte, periodisch die Ausführung dieser SQL anzufordern. Es ist auch nicht tragbar. – Bohemian

17

MySQL Event Scheduler - Ein guter Ersatz für Cron.

Wir alle wissen über Cron, eine einfache Möglichkeit, bestimmte Prozesse zu planen, wie zum Beispiel jede Woche die Log-Tabellen in Ihrer MySQL-Datenbank zu kürzen.

Mit MySQL 5.1 haben die Jungs von MySQL eine neue coole Funktion eingeführt: Den MySQL Event Scheduler!

Mit dem Event Scheduler können Sie Aufgaben planen, die Sie für Ihre Datenbank ausführen möchten. Das ist großartig für Web-Entwickler, die keine Cron-Jobs auf ihrem Webspace erstellen können, weil ihr Host sie nicht zulassen wird! Es ist wirklich ein großartiger Ersatz für Cron!

Einige Beispiele:

Sie jede Woche Ihr Anwendungsprotokoll Tabelle trunkieren wollen, ist dies, wie Sie Ihren Ereignisplan aussehen soll:

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 vorstellen Event-Scheduler die wir alternative verwenden können, um Cron-Job. Es gibt viele Vorteile gegenüber Cronjob wie:

1) Es ist direkt auf Mysql Server geschrieben.

2) Dies ist plattformunabhängig. Ihre Bewerbung könnte in jeder Sprache geschrieben sein, die nicht wichtig ist. Sie müssen nur mysql kennen.

3) Wir können sie verwenden, wenn ein Datenbankupdate oder eine Bereinigung in regelmäßigen Intervallen erforderlich ist.

4) Keine Notwendigkeit, Abfragen jedes Mal zu kompilieren, wenn die Leistung erhöht wurde.

5) Fehler kann Log-Dateien protokollieren. Syntax:

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 ; 

Für weitere Informationen können Sie die offizielle Website besuchen: http://dev.mysql.com/doc/refman/5.1/en/create-event.html

Detail Blog: http://goo.gl/6Hzjvg

0

Mysql Event-Scheduler auf den Vorteil für den gemeinsamen Host-Umgebung ist. In Bezug auf das Timing kann es auch auf den zweiten terminiert werden. Im Gegensatz zu Cron ist es von Minute zu Minute - aber Sie können diese Einschränkung jedoch umgehen.

1

i mit mysql Ereignis werde schedular

, weil wir nur durch das Schreiben einer Abfrage nicht eine zusätzliche Datei codieren müssen für sie, unser Ziel erfüllt werden.

Wenn nur datenbankbezogene Operationen erforderlich sind, dann ist mysql event schedelar eine gute Wahl.

0

Bitte überprüfen Sie den Code unten:

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

ich mich mit Event jetzt gerade arbeitete und dachte die gleichen :)

Zusätzlich zu den oben genannten Antworten:

  • Verwenden EVENTs, wenn die Aufgabe rein datenzentriert ist oder Funktionen ergänzt, die bereits in die Datenbank integriert sind. Möglicherweise verfügen Sie bereits über Auslöser, die Daten bereinigen, bestimmte Ereignisse protokollieren, bestimmte Daten aggregieren usw. Wenn die geplante Aufgabe, die Sie ausführen möchten, Teil des vorhandenen Entwurfs ist, ist sie geschlossener, um die Aufgabe von einem EVENT auszulösen. EVENTs sind zeitliche Auslöser nach allem.

  • Wenn Sie ein Skript von einer Shell ausführen, benötigen Sie einen Benutzernamen/ein Kennwort, die im Shell-Skript oder in einer Standarddatei gespeichert sind. Für die Ausführung von EVENTs benötigen Sie nach dem Anlegen des EVENTs keinen Benutzernamen/Passwort.

  • IMCO sollten Sie die Logik in einer gespeicherten Prozedur schreiben; Rufen Sie dann die Prozedur von einem EVENT oder von einem Shell-Skript auf, was immer Ihnen am besten passt. Sie können sogar einen Bereich in Ihrer Benutzeroberfläche erstellen, über den Benutzer die Prozedur manuell aufrufen können.

+0

Formatieren Sie Ihre Inhalte ein wenig, es wäre besser, wenn es gut aussieht. – Billa