tôi suy nghĩ ý tưởng của một hàm CLR hay cái gì đại loại mà các cuộc gọi các dịch vụ sau thành công chèn/cập nhật/xóa dữ liệu từ các bảng. Đó có phải là tốt trong tình huống này không?
Có lẽ đó không phải là ý tưởng hay, nhưng tôi đoán nó vẫn tốt hơn là vào địa ngục kích hoạt bảng.
Tôi cho rằng vấn đề của bạn là bạn muốn làm điều gì đó sau mỗi lần sửa đổi dữ liệu, giả sử, tính toán lại một số giá trị hoặc bất kỳ giá trị nào. Để cơ sở dữ liệu chịu trách nhiệm về điều này không phải là một ý tưởng tốt bởi vì nó có thể có tác động nghiêm trọng đến hiệu suất.
Bạn đã đề cập đến bạn muốn phát hiện chèn, cập nhật và xóa trên các bảng khác nhau. Làm theo cách bạn đang hướng tới, điều này sẽ yêu cầu bạn thiết lập ba hàm trigger/CLR trên mỗi bảng và yêu cầu họ đăng sự kiện lên WCF Service (thậm chí được hỗ trợ trong tập con của .net có sẵn bên trong máy chủ sql?). Dịch vụ WCF thực hiện các hành động thích hợp dựa trên các sự kiện đã nhận được.
Giải pháp tốt hơn cho vấn đề sẽ là di chuyển trách nhiệm phát hiện sửa đổi dữ liệu từ cơ sở dữ liệu của bạn sang ứng dụng của bạn. Điều này thực sự có thể được thực hiện rất dễ dàng và hiệu quả.
Mỗi bảng có khóa chính (int, GUID hoặc bất kỳ thứ gì) và cột dấu thời gian, cho biết thời điểm mục nhập được cập nhật lần cuối. Đây là một thiết lập bạn sẽ thấy rất thường xuyên trong các tình huống đồng thời lạc quan, vì vậy thậm chí có thể không cần thiết phải cập nhật các định nghĩa lược đồ của bạn. Mặc dù, nếu bạn cần thêm cột này và không thể tải xuống dấu thời gian cho ứng dụng bằng cách sử dụng cơ sở dữ liệu, bạn chỉ cần viết một kích hoạt cập nhật cho mỗi bảng, cập nhật dấu thời gian sau mỗi lần cập nhật.
Để phát hiện sửa đổi, ứng dụng giám sát/dịch vụ WCF của bạn xây dựng một từ điển cục bộ (tốt nhất là một hashtable) với các cặp khóa/dấu thời gian chính tại một khoảng thời gian nhất định. Sử dụng chỉ mục vùng phủ sóng trong cơ sở dữ liệu, thao tác này sẽ rất nhanh. Bước tiếp theo là so sánh cả hai từ điển và voilá, bạn sẽ đi.
Mặc dù vậy, có một số cảnh báo cho phương pháp này. Một trong số đó là tổng số bản ghi trên mỗi bảng, một bản ghi khác là tần suất cập nhật (nếu nó quá thấp thì không hiệu quả) và một điểm xác định khác là nếu bạn cần truy cập dữ liệu trước đó để sửa đổi/chèn.
Hy vọng điều này sẽ hữu ích.
Trong trường hợp của tôi, tôi không có quyền truy cập trực tiếp vào cơ sở dữ liệu nhưng truy cập vào các bảng trong Cơ sở dữ liệu. Hàng đợi Nhà môi giới sẽ có ý nghĩa trong trường hợp của tôi không? Những gì tôi cần là một cách để sắp xếp cuộc thăm dò các bảng cụ thể cho các thay đổi (chèn, cập nhật, xóa) và kích hoạt một sự kiện như là kết quả của việc xử lý tiếp theo diễn ra sau đó. Tôi đã suy nghĩ về ý tưởng của một hàm CLR hoặc một loại sắp xếp gọi dịch vụ sau khi chèn/cập nhật/xóa dữ liệu thành công từ các bảng. Điều đó có tốt trong tình huống này không? – Kobojunkie
để viết SQL-CLR bạn cần truy cập trực tiếp vào cơ sở dữ liệu. Trong thực tế, bạn đang mâu thuẫn với chính mình ?! –