web-dev-qa-db-fra.com

Cronjob ou événement MySQL?

Je dois mettre à jour ma base de données MySQL toutes les heures et je me demandais quels étaient les avantages/inconvénients de l'utilisation d'un cronjob par rapport à un événement MySQL? Par exemple, lequel est le plus rapide? Lequel est le plus sûr? Merci!

21
Michael Eilers Smith

Je voudrais toujours faire un travail cron, parce que:

  • C’est là que les administrateurs système s’attendent à ce qu’il en soit ainsi (il ne faut pas sous-estimer ce point)
  • crobtab est à l'épreuve des balles, éprouvé dans le temps, extrêmement utilisé et compris
  • Vous pouvez librement diriger/analyser les messages d'erreur/de succès où vous le souhaitez
  • Certaines tâches de base de données nécessitent/préfèrent que mysql soit hors ligne (par exemple, une sauvegarde complète), vous devez donc utiliser cron pour ces tâches. vous ne savez pas où regarder
  • Vous pouvez enchaîner d'autres événements qui devraient suivre si vous avez un script Shell.

Et finalement, ce n'est pas parce que vous pouvez faites quelque chose que c'est une bonne idée. Mysql est bon pour les données. Ne l'utilisez pas pour "Shell".

17
Bohemian

MySQL Event Scheduler - Un bon substitut pour cron.

Nous connaissons tous cron, un moyen facile de planifier certains processus, comme la troncature de vos tables de journalisation dans votre base de données MySQL chaque semaine.

Avec MySQL 5.1, les gars de MySQL ont introduit une nouvelle fonctionnalité intéressante: le planificateur d’événements MySQL!

Avec le planificateur d’événements, vous pouvez planifier les tâches que vous souhaitez effectuer sur votre base de données. C’est formidable pour les développeurs Web qui ne peuvent pas créer de tâches cron sur leur espace Web, car leur hôte ne les laissera pas faire! C’est vraiment un excellent substitut pour cron!

Quelques exemples:

vous souhaitez tronquer votre table de journal des applications toutes les semaines, voici comment votre calendrier d'événements devrait se présenter:

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
18
user2001117

Mysql présente le planificateur d’événements que nous pouvons utiliser comme alternative à Cronjob. Il y a beaucoup d'avantages sur cronjob comme:

1) Il est écrit directement sur Mysql Server.

2) Ceci est indépendant de la plateforme. Votre application peut être écrite dans n'importe quelle langue, cela n'a pas d'importance. Vous avez juste besoin de connaître mysql.

3) Nous pouvons les utiliser chaque fois qu'une mise à jour ou un nettoyage de la base de données est requis à intervalle régulier.

4) Pas besoin de compiler des requêtes à chaque fois, donc augmentation des performances.

5) Une erreur peut être consignée dans les fichiers journaux. Syntaxe:

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 ;

Pour plus d'informations, vous pouvez visiter le site officiel: http://dev.mysql.com/doc/refman/5.1/fr/create-event.html

blog de détail: http://goo.gl/6Hzjvg

8
Suresh Kamrushi

Veuillez vérifier le code ci-dessous:

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;
    }
}
1
user9373052

je vais avec mysql event schedular

comme nous n’avons pas à coder un fichier supplémentaire, nous pouvons remplir notre objectif en écrivant une seule requête.

si seule l'opération liée à la base de données est requise, alors mysql event schedular est un bon choix.

1
meet

Je travaille avec des événements moi-même maintenant et réfléchi la même chose :)

En plus des réponses ci-dessus:

  • Utilisez EVENT si la tâche est purement centrée sur les données ou complète les fonctionnalités déjà intégrées à la base de données. Vous avez peut-être déjà des déclencheurs qui nettoient les données, enregistrent certains événements, agrègent certaines données, etc. Si la tâche planifiée que vous souhaitez effectuer fait partie de la conception existante, il est plus cohérent de déclencher la tâche à partir d'un événement. Les événements sont des déclencheurs temporels après tout.

  • Si vous exécutez un script à partir d'un shell, vous avez besoin d'un nom d'utilisateur/mot de passe stocké dans le script shell ou dans un fichier par défaut. Pour exécuter des événements, vous n'avez pas besoin d'un nom d'utilisateur/mot de passe après la création de l'événement.

  • IMCO vous devez écrire la logique dans une procédure stockée; invoquez ensuite la procédure à partir d'un événement ou d'un script shell, à votre convenance. Vous pouvez même créer un emplacement dans votre interface utilisateur permettant aux utilisateurs d'appeler la procédure manuellement.

0
Barend Scholtus

Le planificateur d'événements Mysql est un avantage pour l'environnement d'hôte partagé. En termes de timing, il peut également être programmé à la seconde près. Contrairement à cron, c'est à la minute, mais vous pouvez contourner cette limitation.

0
CoolRunning