मुझे हर घंटे अपना MySQL डेटाबेस अपडेट करना है, और मैं सोच रहा था कि एक cronjob वीएस एक MySQL घटना का उपयोग करने के फायदे/नुकसान क्या हैं? उदाहरण के लिए, जो तेज़ है? कौन सा सुरक्षित है? धन्यवाद!क्रोनबॉज या MySQL घटना?
उत्तर
मैं हमेशा जाना होगा एक क्रॉन जॉब, क्योंकि:
- जहां sysadmins यह होने की उम्मीद जाएगा (इस बिंदु को कम करके आंका जा करने के लिए नहीं है)
- crobtab बुलेट प्रूफ, समय परीक्षण किया जाता है है यही कारण है कि, अत्यंत व्यापक रूप से इस्तेमाल और समझा
- आप स्वतंत्र रूप से प्रत्यक्ष /, त्रुटि/सफलता संदेशों जहाँ आप चाहते हैं
- कुछ डेटाबेस कार्यों की आवश्यकता होती है/mysql पसंद करते ऑफ लाइन (जैसे पूर्ण बैकअप) होने के लिए विश्लेषण आप का उपयोग करने के लिए मिला है तो क्रॉन कर सकते हैं उन लोगों के लिए - क्रॉन के साथ कुछ काम करने और कुछ करने के लिए यह एक बुरा विचार है mysql के साथ; यदि आप अनिश्चित
- आप श्रृंखला को अन्य घटनाओं है कि का पालन करना चाहिए अगर आप एक खोल स्क्रिप्ट
मिला और अंत में किया है सकते हैं, सिर्फ इसलिए कि आप कुछ कर सकते हैं, इसका मतलब यह नहीं देखने के लिए जहां हो जाएगा यह एक अच्छा विचार है। MySQL डेटा सामान पर अच्छा है। इसे "खोल" सामान के लिए उपयोग न करें।
वास्तव में, अगर है कि अद्यतन केवल एक मामला है डेटा के बारे में, इसे SQL में डालने का अर्थ होता है: यह सुनिश्चित करने के लिए SQL कार्य है कि डेटा "ठीक" (सुलभ, अद्यतित, अनुकूलित, आदि) है, इसलिए MySQL ईवेंट डेटा को साफ करने, ऑप्टिमाइज़ेशन, या उनके कार्यक्रमों में उपचार समझ में आता है। – Xenos
@Xenos सिर्फ इसलिए कि एक तकनीक * कुछ * कर सकती है इसका मतलब यह नहीं होना चाहिए। इस मामले में, डेटा हाउसकीपिंग एक * परिचालन * चिंता है, इसलिए एक * परिचालन * समाधान सबसे उपयुक्त है। सिर्फ इसलिए कि कार्य को SQL को निष्पादित करने की आवश्यकता है, इसका मतलब यह नहीं है कि डेटाबेस को समय-समय पर उस SQL के निष्पादन का अनुरोध करने का कार्य भी प्रबंधित करना चाहिए। यह पोर्टेबल भी नहीं है। – Bohemian
MySQL ईवेंट शेड्यूलर - क्रॉन के लिए एक अच्छा प्रतिस्थापन।
हम सभी को क्रॉन के बारे में पता है, कुछ प्रक्रियाओं को निर्धारित करने का एक आसान तरीका, जैसे हर सप्ताह अपने MySQL डेटाबेस में अपनी लॉग टेबल को छोटा करना।
MySQL 5.1 के साथ MySQL पर लोगों ने एक नई शानदार सुविधा पेश की: MySQL इवेंट शेड्यूलर!
इवेंट शेड्यूलर के साथ आप उन कार्यों को शेड्यूल कर सकते हैं जिन्हें आप अपने डेटाबेस पर करना चाहते हैं। यह वेब डेवलपर्स के लिए बहुत अच्छा है जो अपने वेबस्पेस पर क्रॉन नौकरियां नहीं बना सकते हैं, क्योंकि उनका होस्ट उन्हें नहीं देगा! यह वास्तव में क्रॉन के लिए एक महान प्रतिस्थापन है!
कुछ उदाहरण:
आप हर हफ्ते अपने आवेदन लॉग तालिका काटना चाहते हैं, यह आपके घटना अनुसूची की तरह दिखना चाहिए कैसे:
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
Mysql घटना अनुसूचक है जो हम करने के लिए वैकल्पिक का उपयोग कर सकते परिचय क्रॉन नौकरी। Cronjob पर कई फायदे हैं जैसे:
1) यह सीधे माइस्क्ल सर्वर पर लिखा गया है।
2) यह मंच स्वतंत्र है। आपका आवेदन किसी भी भाषा में लिखा जा सकता है जो इससे कोई फर्क नहीं पड़ता। आपको बस mysql को जानने की जरूरत है।
3) जब भी डेटाबेस अद्यतन या क्लीनअप अंतराल पर आवश्यक सफाई हो, हम उनका उपयोग कर सकते हैं।
4) हर बार प्रदर्शन में वृद्धि होने पर प्रश्नों को संकलित करने की कोई आवश्यकता नहीं है।
5) त्रुटि लॉग लॉग में लॉग इन किया जा सकता है। सिंटेक्स: http://dev.mysql.com/doc/refman/5.1/en/create-event.html
विस्तार ब्लॉग: http://goo.gl/6Hzjvg
Mysql घटना अनुसूचक साझा मेजबान पर्यावरण के लिए लाभ पर है
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 ;
अधिक जानकारी के लिए आप आधिकारिक वेबसाइट पर जा सकते हैं। समय के संदर्भ में, इसे दूसरे स्थान पर भी निर्धारित किया जा सकता है। क्रॉन के विपरीत, यह मिनट तक है - लेकिन आप इस सीमा के आसपास काम कर सकते हैं।
मैं schedular
mysql घटना के साथ जा रहा हूँ क्योंकि हम इसके लिए एक अतिरिक्त फ़ाइल कोड करने के लिए नहीं है, हमारा उद्देश्य सिर्फ एक क्वेरी लिख कर पूरा किया जा सकता।
यदि केवल डेटाबेस से संबंधित ऑपरेशन आवश्यक है तो mysql ईवेंट शेड्यूलर अच्छा विकल्प है।
नीचे कोड की जाँच करें:
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;
}
}
मैं घटनाओं के साथ अपने आप को काम कर रहा हूँ और एक ही :)
विचार ऊपर जवाब के अलावा:
उपयोग घटनाएं यदि कार्य पूरी तरह से डेटा-केंद्रित है, या पूर्ण कार्यक्षमता जो डेटाबेस में पहले से ही बनाई गई है। आपके पास पहले से ही ट्रिगर्स हो सकते हैं जो डेटा साफ़ करते हैं, कुछ ईवेंट लॉग करते हैं, कुछ निश्चित डेटा इत्यादि करते हैं। यदि निर्धारित कार्य जिसे आप करना चाहते हैं, मौजूदा डिज़ाइन का हिस्सा है, तो यह कार्य को किसी ईवेंट से ट्रिगर करने के लिए अधिक समेकित है। EVENTS अस्थायी ट्रिगर सभी के बाद हैं।
यदि आप किसी शेल से एक स्क्रिप्ट चलाते हैं, तो आपको शेल स्क्रिप्ट में या डिफ़ॉल्ट फ़ाइल में संग्रहीत उपयोगकर्ता नाम/पासवर्ड की आवश्यकता होती है। EVENT को निष्पादित करने के लिए, EVENT के निर्माण के बाद आपको उपयोगकर्ता नाम/पासवर्ड की आवश्यकता नहीं है।
आईएमसीओ आपको संग्रहीत प्रक्रिया में तर्क लिखना चाहिए; फिर किसी घटना से या शेल स्क्रिप्ट से प्रक्रिया का आह्वान करें, जो भी आपको सबसे अच्छा लगा। आप अपने यूआई में कुछ जगह भी बना सकते हैं जो उपयोगकर्ताओं को मैन्युअल रूप से प्रक्रिया को लागू करने में सक्षम बनाता है।
अपनी सामग्री को थोड़ा सा प्रारूपित करें, यह अच्छा लगेगा तो बेहतर होगा। – Billa
[Mysql ट्रिगर/घटनाओं बनाम cronjob] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/1734073/mysql-trigger-events-vs-cronjob) – bipen