Việc bỏ phiếu là cách duy nhất để cập nhật dữ liệu của ứng dụng từ cơ sở dữ liệu?


17

Một ứng dụng cần phải có dữ liệu càng được cập nhật mới từ cơ sở dữ liệu càng tốt. Trong trường hợp như vậy, có cách nào khác để lấy dữ liệu, ngoài bộ đếm thời gian dựa trên yêu cầu (bỏ phiếu) cơ sở dữ liệu không?

Tôi làm việc với MS SQL Server 2008 (và các ứng dụng .NET + Entity Framework), nhưng tôi cũng muốn biết về các loại cơ sở dữ liệu khác.


Microsoft StreamInsight được thiết kế đặc biệt để cho phép xử lý dựa trên "sự kiện dữ liệu". Tôi không biết nhiều về nó, nhưng nó trông giống như một nền tảng hoàn chỉnh và độc lập hơn là một tính năng riêng lẻ của SQL Server. Đây là sơ đồ kiến ​​trúc StreamInsight .
Nick Chammas

Câu trả lời:


5

Nhà môi giới dịch vụ cho SQL Server 2005+ có thể làm điều này.

Xin lỗi, tôi không chắc chắn về RDBMS khác


2
Bạn có thể giải thích về cách dịch vụ môi giới này không? @rem đang hỏi về việc truy xuất các cập nhật được kích hoạt sự kiện (trái ngược với thời gian kích hoạt) từ cơ sở dữ liệu. SB là để xếp hàng và xử lý asyc.
Nick Chammas

1
-1 Nhà môi giới dịch vụ dường như không có bất cứ điều gì được tích hợp để cho một ứng dụng biết rằng nó đã nhận được một tin nhắn. (Tôi hiện đang bị mắc kẹt về vấn đề này.)
Vaccano

10

Trong Oracle, bạn có thể sử dụng gói DBMS_ALERT tích hợp để tạo điều kiện thuận lợi cho việc này.

DBMS_ALERT hỗ trợ thông báo không đồng bộ về các sự kiện cơ sở dữ liệu (cảnh báo). Bằng cách sử dụng thích hợp gói kích hoạt cơ sở dữ liệu này, một ứng dụng có thể tự thông báo bất cứ khi nào giá trị quan tâm trong cơ sở dữ liệu được thay đổi.

Giả sử một công cụ đồ họa đang hiển thị biểu đồ của một số dữ liệu từ bảng cơ sở dữ liệu. Công cụ đồ họa có thể, sau khi đọc và vẽ đồ thị dữ liệu, hãy đợi cảnh báo cơ sở dữ liệu (WAITONE) bao gồm dữ liệu vừa đọc. Công cụ sẽ tự động thức dậy khi dữ liệu bị thay đổi bởi bất kỳ người dùng nào khác. Tất cả những gì được yêu cầu là một bộ kích hoạt được đặt trên bảng cơ sở dữ liệu, thực hiện tín hiệu (TÍN HIỆU) bất cứ khi nào kích hoạt được kích hoạt.


Và đối với "MS SQL Server 2008" theo câu hỏi của OP? Họ đã yêu cầu RDBMS khác nhưng điều này thực sự không có ích.
gbn

9
@gbn Tại sao nó không giúp? Tôi không thể trả lời phần SQL Server như bạn có thể, vì vậy tôi đã trả lời phần tôi có thể. Không ai là chuyên gia về tất cả các cơ sở dữ liệu khác, nhưng nếu mỗi chúng ta đóng góp kiến ​​thức của mình thì OP và khách truy cập trong tương lai sẽ tìm thấy thông tin hữu ích. Tôi mong OP sẽ chấp nhận câu trả lời của SQL Server và bỏ phiếu cho các câu trả lời hữu ích khác như ScottCher's (+1).
Leigh Riffel

nói hay lắm. Sau khi đọc câu trả lời DBMS_ALERT của bạn, tôi đã học được một cách khác để làm điều này - nhiều công cụ hơn cho hộp công cụ! +1
ScottCher

7

Một số nhà cung cấp cơ sở dữ liệu cũng cung cấp các bus tin nhắn tích hợp mà ứng dụng của bạn có thể đăng ký đơn giản:

Một cách khác là định tuyến dữ liệu vào cơ sở dữ liệu ở nơi đầu tiên thông qua một bus tin nhắn như Tibco / RV và chỉ đơn giản là "phân nhánh" nó, trên luồng đi vào DB và một đi đến ứng dụng của bạn hoặc sử dụng lớp bộ đệm như Coherence giữa ứng dụng của bạn và DB.


7

NGHE / THÔNG BÁO cho PostgreSQL

http://www.postgresql.org/docs/civerse/static/sql-notify.html

trong cơ sở dữ liệu ...

NOTIFY static_channel_name, 'static-message';

hoặc trong một chức năng / kích hoạt:

perform pg_notify('dynamic-channel-name', 'dynamic-message');

trong cơ sở dữ liệu khách hàng:

LISTEN some_channel_name; --note the lack of quotes

Máy khách LISTEN sẽ nhận được ID tiến trình PostgreSQL, tên kênh và giá trị tin nhắn.

Trình điều khiển JDBC tiêu chuẩn cho PostgreSQL không thích thông báo, tuy nhiên bạn có thể sử dụng trình điều khiển https://github.com/impossibl/pgjdbc-ng cho mục đích này


5

Một giải pháp khác của Oracle: Chúng tôi đã phát triển các ứng dụng sử dụng khung dotnet từ Microsoft, tận dụng Thông báo Thay đổi Cơ sở dữ liệu tính năng của Oracle kết hợp với ODP.Net (nhà cung cấp dữ liệu Oracle cho dotnet). Sử dụng điều này, cơ sở dữ liệu thực sự thông báo cho ứng dụng dotnet khi dữ liệu mới đã đến cho phép chúng tôi tránh bỏ phiếu liên tục. Liên kết tôi tham khảo ở trên là một hướng dẫn của Oracle để làm việc đó. Hy vọng điều này sẽ giúp bạn ra ngoài.

Không biết về bất kỳ RDBMS nào khác.


2

Đối với một trong các ứng dụng của chúng tôi (Chrome truy cập qua Chrome và CHỈ Chrome), chúng tôi đang sử dụng MySQL với sys_exec UDF . Về cơ bản, tại sao Chrome - do hỗ trợ WebSocket.

Khi xảy ra cập nhật / chèn / xóa quan trọng, một chương trình bên ngoài được gọi qua chức năng sys_exec mới được thêm vào được nhúng trong một số kích hoạt nhất định. Tại thời điểm đó, chúng tôi đã có tất cả những gì chúng tôi cần để chuyển thông điệp đến mọi khách hàng được kết nối mà không cần phải bỏ phiếu hoặc nhiều truy vấn vì mọi thứ diễn ra theo thời gian thực.


1

Chúng tôi sử dụng kết hợp Oracle GoldenGate và Java Persistence API (JPA) để thực hiện điều này với cơ sở dữ liệu Oracle, nhưng cũng với DB2, Sybase, Microsoft SQL Server, MySQL, Teradata, v.v. Tính năng này được mô tả ở đây: http: // docs .oracle.com / middleware / 1212 / kết hợp / COHIG / yellow_g.htm

Những gì GoldenGate làm là biến nhật ký giao dịch cơ sở dữ liệu thành một luồng sự kiện có thể lọc có thể được tiêu thụ ở bất cứ đâu trên mạng. Chúng tôi sử dụng nó để biến các giao dịch có liên quan thành cập nhật bộ đệm hoặc vô hiệu hóa bộ đệm, cả hai đều có thể kích hoạt các sự kiện ở cấp ứng dụng, ví dụ như đẩy tất cả dữ liệu ra các ứng dụng websocket trên máy tính để bàn hoặc HTML5.

(Để tiết lộ đầy đủ, tôi làm việc tại Oracle trên một trong những sản phẩm sử dụng GoldenGate.)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.