2010-12-11 37 views
6

Tôi đang tìm một giải pháp tương tự như phương pháp inotify khi xem tệp để thay đổi. Tôi biết rằng tôi có thể xem tệp binlog của cơ sở dữ liệu mysql và chạy truy vấn để chọn ra các kết quả mới nhưng điều đó có vẻ rất kém hiệu quả và không phù hợp; cũng đơn giản là làm khối lượng truy vấn trong một vòng lặp chờ kết quả mới.Có cách nào để xem cơ sở dữ liệu mysql cho các thay đổi bằng cách sử dụng perl không?

+7

http://stackoverflow.com/questions/3501346/how-do-i-hook-into-an-event-triggered-once-a-mysql-query-is-true – daxim

Trả lời

6

Nếu bạn thêm TRIGGER vào (các) bảng mà bạn quan tâm, bạn có thể sử dụng để cảnh báo ứng dụng xem. Bạn có thể làm điều đó theo một số cách:

  1. Tạo bảng kiểm tra trong cơ sở dữ liệu và kích hoạt ghi thông tin liên quan tại đó; và có ứng dụng xem cuộc thăm dò của bạn bảng kiểm toán cho các mục mới. Bạn vẫn đang bỏ phiếu, nhưng theo cách được kiểm soát sẽ không đánh máy chủ quá khó.
  2. Có trình kích hoạt call an external app thông qua UDF.
+3

Đó là những gì [tôi đã bình luận cách đây 6 ngày] (http://stackoverflow.com/q/4418598#comment-4820725) như đã có câu trả lời. Thưởng thức tiền thưởng của bạn. – daxim

+2

FWIW, tôi đã thêm câu trả lời này trước khi tôi nhận thấy nhận xét của bạn (tôi đã upvote); và giải pháp được đề xuất đầu tiên của tôi khác với giải pháp của bạn. Tôi thực sự không phải là đạo văn. –

+1

@daxim: Nếu bạn muốn tiền thưởng - bạn nên đăng nhận xét của mình làm câu trả lời! ;-) – Brad

1

Theo như bảng MyISAM, bạn có thể xem information_schema.TABLES.UPDATE_TIME. Điều đó sẽ giúp bạn tránh khỏi việc bỏ phiếu cho tất cả các bảng mà bạn quan tâm. Đối với InnoDB, xem binlog là điều tốt nhất tôi có thể nghĩ đến.

+0

+1 cho information_schema. TABLES.UPDATE_TIME – DVK

0

Cách tiếp cận khác là thực hiện đẩy/tín hiệu thay vì cuộc thăm dò ý kiến ​​của DB. Có bất cứ điều gì quá trình cập nhật cơ sở dữ liệu, thông báo mã Perl của bạn rằng một bản cập nhật đã được thực hiện thông qua bất kỳ IPC nào bạn chọn (heck, một tệp nhật ký được nối thêm với tên của bảng đang được thay đổi có thể làm thủ thuật đủ tốt).

Điều này đặc biệt hiệu quả nếu cập nhật một khối lượng khá hiếm/thấp nhưng thời gian phản ứng với chúng phải nhanh chóng.

Một lợi ích bổ sung là tính di động - hoạt động đối với bất kỳ chương trình phụ trợ MySQL nào hoặc cho bất kỳ công cụ DB nào khác.

+0

Rất tiếc, đây không phải là tùy chọn vì cơ sở dữ liệu được cập nhật bởi một số chương trình bên thứ ba khác mà tôi đang sử dụng và tập lệnh perl mà tôi đang viết không cập nhật cơ sở dữ liệu. – Drake

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