2013-02-11 32 views
19

Tôi phải cập nhật cơ sở dữ liệu MySQL của tôi mỗi giờ, và tôi đã tự hỏi những lợi thế/bất lợi của việc sử dụng một cronjob VS một sự kiện MySQL? Ví dụ, nhanh hơn? Đó là an toàn hơn? Cảm ơn!Sự kiện Cronjob hoặc MySQL?

+0

thể trùng lặp của [Mysql kích hoạt/sự kiện vs Cronjob] (http://stackoverflow.com/questions/1734073/mysql-trigger-events-vs-cronjob) – bipen

Trả lời

14

tôi sẽ luôn luôn đi một công việc định kỳ, bởi vì:

  • Đó là nơi quản trị hệ thống sẽ mong đợi nó sẽ (thời điểm này không phải là để được đánh giá thấp)
  • crobtab được chống đạn, thời gian thử nghiệm, Bạn có thể tự do trực tiếp/phân tích các thông báo lỗi/thành công nơi bạn muốn
  • Một số nhiệm vụ cơ sở dữ liệu yêu cầu/thích mysql là off-line (ví dụ như sao lưu toàn bộ), vì vậy bạn phải sử dụng cron cho những người - đó là một ý tưởng tồi để có một số công việc được thực hiện với cron và một số được thực hiện với mysql; bạn sẽ không chắc chắn nơi để tìm
  • Bạn có thể chuỗi lên các sự kiện khác mà nên làm theo nếu bạn đã có một kịch bản shell

Và cuối cùng, chỉ vì bạn có thể làm điều gì đó, không có nghĩa đó là một ý kiến ​​hay. Mysql giỏi về dữ liệu. Không sử dụng nó cho công cụ "vỏ".

+0

Trên thực tế, nếu cập nhật mà chỉ là một vấn đề dữ liệu, nó có ý nghĩa khi đặt nó trong SQL: đó là công việc SQL để đảm bảo dữ liệu là "OK" (có thể truy cập, cập nhật, tối ưu hóa, v.v.), vì vậy hãy để sự kiện MySQL làm sạch dữ liệu, tối ưu hóa, hoặc điều trị trong các sự kiện của họ có ý nghĩa. – Xenos

+0

@Xenos chỉ vì một công nghệ * có thể * làm điều gì đó không có nghĩa là nó nên. Trong trường hợp này, việc quản lý dữ liệu là một mối quan tâm * hoạt động *, do đó, giải pháp * hoạt động * là thích hợp nhất. Chỉ vì nhiệm vụ yêu cầu SQL được thực hiện không có nghĩa là cơ sở dữ liệu cũng nên quản lý nhiệm vụ định kỳ yêu cầu thực hiện SQL đó. Nó cũng không di động. – Bohemian

17

Trình lập lịch sự kiện MySQL - Một sự thay thế tốt cho cron.

Chúng ta đều biết về cron, một cách dễ dàng để lên lịch các quy trình nhất định, như cắt bớt bảng nhật ký trong cơ sở dữ liệu MySQL của bạn mỗi tuần.

Với MySQL 5.1, những người ở MySQL đã giới thiệu một tính năng mới thú vị: Bộ lập lịch sự kiện MySQL!

Với Trình lập lịch sự kiện, bạn có thể lên lịch các tác vụ mà bạn muốn thực hiện trên cơ sở dữ liệu của mình. Điều này thật tuyệt vời cho các nhà phát triển web không thể tạo công việc cron trên webspace của họ, bởi vì người tổ chức của họ sẽ không cho phép họ! Nó thực sự là một sự thay thế tuyệt vời cho cron!

Một vài ví dụ:

bạn muốn cắt ngắn bảng ứng dụng đăng nhập của bạn mỗi tuần, đây là cách lịch sự kiện của bạn sẽ giống như thế:

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 giới thiệu sự kiện lịch trình mà chúng tôi có thể sử dụng thay thế cho Công việc lương thấp. Có nhiều ưu điểm hơn cronjob như:

1) Nó được viết trực tiếp trên Mysql Server.

2) Đây là nền tảng độc lập. Ứng dụng của bạn có thể được viết bằng bất kỳ ngôn ngữ nào không quan trọng. Bạn chỉ cần biết mysql.

3) Chúng tôi có thể sử dụng chúng bất cứ khi nào có cập nhật cơ sở dữ liệu hoặc yêu cầu dọn dẹp tại khoảng thời gian quy định.

4) Không cần phải biên dịch truy vấn mỗi lần do đó hiệu suất tăng lên.

5) Lỗi có thể đăng nhập vào tệp nhật ký. Cú pháp:

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 ; 

Để biết thêm thông tin bạn có thể ghé thăm trang web chính thức: http://dev.mysql.com/doc/refman/5.1/en/create-event.html

chi tiết blog: http://goo.gl/6Hzjvg

0

Mysql sự kiện lịch là lợi thế cho môi trường máy chủ chia sẻ. Xét về thời gian, nó cũng có thể được sắp xếp theo thứ tự. Không giống như cron, đó là vào phút - nhưng bạn có thể làm việc xung quanh giới hạn này tuy nhiên.

1

tôi đang đi với sự kiện mysql schedular

bởi vì chúng ta không cần phải viết mã một tập tin bổ sung cho nó, mục đích của chúng tôi có thể được thực hiện bằng cách chỉ cần viết một truy vấn.

nếu chỉ có hoạt động liên quan đến cơ sở dữ liệu được yêu cầu thì lịch biểu sự kiện mysql là lựa chọn tốt.

0

Vui lòng kiểm tra mã bên dưới:

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

Tôi đang làm việc với các sự kiện bản thân mình bây giờ và suy nghĩ giống nhau :)

Ngoài các câu trả lời ở trên:

  • Sử dụng SỰ KIỆN nếu tác vụ hoàn toàn là trung tâm dữ liệu hoặc bổ sung chức năng đã được tích hợp vào cơ sở dữ liệu. Bạn có thể đã có các trình kích hoạt làm sạch dữ liệu, ghi lại các sự kiện nhất định, tổng hợp dữ liệu nhất định, v.v. Nếu tác vụ được lập biểu bạn muốn thực hiện là một phần của thiết kế hiện có, nó gắn kết hơn để kích hoạt tác vụ từ EVENT. EVENTs là trình kích hoạt tạm thời.

  • Nếu bạn chạy tập lệnh từ trình bao, bạn cần tên người dùng/mật khẩu được lưu trữ trong tập lệnh shell hoặc trong tệp mặc định. Để thực hiện EVENT, bạn không cần tên người dùng/mật khẩu sau khi EVENT được tạo.

  • IMCO bạn nên viết logic trong quy trình được lưu trữ; sau đó gọi thủ tục từ một EVENT hoặc từ một kịch bản shell, bất cứ điều gì phù hợp với bạn nhất. Bạn thậm chí có thể xây dựng một số vị trí trong giao diện người dùng của mình cho phép người dùng gọi thủ tục theo cách thủ công.

+0

Định dạng nội dung của bạn một chút, Sẽ tốt hơn nếu có vẻ tốt. – Billa

Các vấn đề liên quan