Tôi đã phát triển ứng dụng này trên VB.net 2010
và SQL 2008
.
Tôi muốn khách hàng được thông báo về các cập nhật trên db và ứng dụng được sử dụng để kiểm tra db cho các thay đổi trong phút được chỉ định bằng bộ hẹn giờ, điều này thực sự không hiệu quả. Tôi đọc về query notification
, sqldependency
, service broker
, nhưng sau đó tôi đọc nội dung nào đó có thể không hiệu quả nếu tôi có 100 khách hàng và tôi đang sử dụng thông báo truy vấn để đẩy thông báo đến ứng dụng của mình.
Ai đó có thể giúp tôi về những gì tôi nên làm và cách tôi có thể làm điều đó (sẽ thực sự hữu ích nếu có các ví dụ). Cảm ơn trước!Tôi muốn cơ sở dữ liệu của tôi (SQL) thông báo hoặc đẩy cập nhật cho ứng dụng của khách hàng
Trả lời
Thông báo truy vấn sẽ đẩy tới dịch vụ Nhà môi giới dịch vụ chứ không phải trực tiếp đến đơn đăng ký của bạn. Xem The Mysterious Notification để hiểu cách hoạt động. Ứng dụng của bạn đang chờ thông báo bằng cách đăng một tuyên bố WAITFOR(RECEIVE)
trên cơ sở dữ liệu. Điều này ngụ ý rằng mỗi 100 máy khách đang chiếm một chuỗi công nhân SQL Server (có giới hạn, xem tùy chọn max worker threads
). Tôi đã nhìn thấy điều này làm việc trong sản xuất với 1.000 khách hàng (sau khi bumping lên tùy chọn chủ đề công nhân tối đa) nhưng tôi sẽ tư vấn cho chống lại nó.
Đề xuất của tôi sẽ là có một giám sát dịch vụ để thay đổi, sử dụng SqlDependency/QueryNotifications. Dịch vụ này sau đó sẽ đẩy thông báo, sử dụng WCF ví dụ, cho tất cả các ứng dụng đang chạy của bạn. Bạn sẽ đăng ký các thay đổi chung (the table Foo was changed
), chứ không phải các thay đổi cụ thể (the row x in table Foo was inserted
).
Như một quy tắc chung SqlDependency/Query Notifications chỉ có thể thông báo cho bạn rằng dữ liệu đã thay đổi, nhưng nó sẽ không đẩy dữ liệu mới mới. Ứng dụng phải làm mới bộ dữ liệu cục bộ của nó bằng cách chạy lại các truy vấn, sau khi được thông báo.
Hãy cẩn thận khi sử dụng lớp SqlDependency - nó có problems với rò rỉ bộ nhớ. Hovewer, bạn có thể sử dụng việc thực hiện mã nguồn mở của lớp SqlDependency - SqlDependencyEx. Nó sử dụng một trình kích hoạt cơ sở dữ liệu và thông báo môi giới dịch vụ gốc để nhận các sự kiện về các thay đổi của bảng. Đây là một ví dụ sử dụng:
int changesReceived = 0;
using (SqlDependencyEx sqlDependency = new SqlDependencyEx(
TEST_CONNECTION_STRING, TEST_DATABASE_NAME, TEST_TABLE_NAME))
{
sqlDependency.TableChanged += (o, e) => changesReceived++;
sqlDependency.Start();
// Make table changes.
MakeTableInsertDeleteChanges(changesCount);
// Wait a little bit to receive all changes.
Thread.Sleep(1000);
}
Assert.AreEqual(changesCount, changesReceived);
Với SqlDependecyEx bạn có thể theo dõi chỉ UPDATE, DELETE tránh và INSERT. Hi vọng điêu nay co ich.
- 1. Thông báo cho dịch vụ WCF của tôi khi cơ sở dữ liệu của tôi được cập nhật
- 2. khay thông báo cập nhật cơ sở dữ liệu
- 3. Tạo tập lệnh SQL cho dữ liệu của cơ sở dữ liệu của tôi (SQL SERVER)
- 4. Chặn khách truy cập không mong muốn: htaccess, iptables hoặc chỉ cơ sở dữ liệu
- 5. Làm cách nào để xem thông tin cơ sở dữ liệu Ứng dụng Android của tôi?
- 6. Ứng dụng cơ sở dữ liệu Client-Server: cách thông báo cho khách hàng rằng dữ liệu đã bị thay đổi?
- 7. Cơ sở dữ liệu tích hợp cho Ứng dụng JavaSE của tôi
- 8. Lấy thư mục cơ sở dữ liệu cho ứng dụng của tôi theo chương trình
- 9. một cơ sở dữ liệu cho mỗi khách hàng hoặc tất cả khách hàng trong một cơ sở dữ liệu. Tôi nên sử dụng cái nào cho một ứng dụng trực tuyến?
- 10. Trình nghe WebSocket cho Cơ sở dữ liệu Microsoft SQL
- 11. Cách triển khai Chứng chỉ thông báo đẩy của Apple cho trang web của khách hàng
- 12. Cập nhật cơ sở dữ liệu Android
- 13. Cập nhật mô hình từ cơ sở dữ liệu (Cơ sở dữ liệu đầu tiên)
- 14. Kiến trúc phần mềm và thiết kế cơ sở dữ liệu: Một cơ sở dữ liệu/ứng dụng web cho mỗi công ty hoặc một cơ sở dữ liệu/ứng dụng web cho tất cả các công ty?
- 15. Ứng dụng web của tôi không tìm thấy cơ sở dữ liệu của tôi khi xuất bản
- 16. Tìm DSN đến Cơ sở dữ liệu của tôi?
- 17. Cập nhật trường bit sql trong cơ sở dữ liệu
- 18. Tôi cần một cơ sở dữ liệu trình duyệt phía máy khách. Các lựa chọn của tôi là gì
- 19. Làm cách nào để tạo Thông báo đẩy tùy chỉnh cho Ứng dụng của riêng tôi?
- 20. Tắt thông báo xóa cho ứng dụng của tôi
- 21. schema Cơ sở dữ liệu của ứng dụng nhắn tin
- 22. Thông báo đẩy của Apple với ứng dụng doanh nghiệp
- 23. Làm cách nào để xóa thông báo đẩy iOS ưu tiên cho ứng dụng của tôi?
- 24. Nhận URL cơ sở của Ứng dụng web của tôi
- 25. Tại sao tôi không thể cập nhật dữ liệu vào cơ sở dữ liệu bằng LINQ to SQL?
- 26. Cập nhật bảng cơ sở dữ liệu từ một bảng cơ sở dữ liệu SQL Server sang bảng cơ sở dữ liệu SQL Server khác?
- 27. Kỹ thuật trong ứng dụng đa người dùng C# nơi tất cả khách hàng có dữ liệu cập nhật từ cơ sở dữ liệu trung tâm
- 28. Ẩn danh cơ sở dữ liệu ứng dụng của bạn
- 29. Thông báo cập nhật ứng dụng iOS
- 30. Tại sao tôi muốn sử dụng cơ sở dữ liệu phi quan hệ?