การสำรวจเป็นวิธีเดียวในการอัปเดตข้อมูลแอปจากฐานข้อมูลหรือไม่


17

แอปพลิเคชันต้องมีข้อมูลที่อัปเดตใหม่จากฐานข้อมูลมากที่สุดเท่าที่จะทำได้ ในกรณีเช่นนี้มีวิธีอื่นในการรับข้อมูลนอกเหนือจากการจับเวลาตามขอ (สำรวจ) ฐานข้อมูลหรือไม่

ฉันทำงานกับ MS SQL Server 2008 (และ. NET applications + Entity Framework) แต่ฉันต้องการรับรู้เกี่ยวกับฐานข้อมูลประเภทอื่นเช่นกัน


Microsoft StreamInsightได้รับการออกแบบมาโดยเฉพาะเพื่อเปิดใช้งานการประมวลผลตาม "data data" ฉันไม่รู้อะไรมากเกี่ยวกับเรื่องนี้ แต่ดูเหมือนว่าแพลตฟอร์มที่สมบูรณ์และเป็นอิสระมากกว่าคุณลักษณะเฉพาะของ SQL Server นี่เป็นสถาปัตยกรรมแผนภาพ StreamInsight
Nick Chammas

คำตอบ:


5

นายหน้าบริการสำหรับ SQL Server 2005+ สามารถทำได้

ขออภัยฉันไม่แน่ใจเกี่ยวกับ RDBMS อื่น ๆ


2
คุณสามารถอธิบายเพิ่มเติมเกี่ยวกับวิธีการที่ Service Broker ทำเช่นนี้ได้หรือไม่? @rem กำลังถามเกี่ยวกับการดึงข้อมูลเหตุการณ์ที่ถูกทริกเกอร์ (ต่างจากการเรียกใช้เวลา) จากฐานข้อมูล SB สำหรับการจัดคิวและการประมวลผล asyc
Nick Chammas

1
-1 นายหน้าบริการดูเหมือนจะไม่มีสิ่งใดในตัวเพื่อแจ้งให้แอปทราบว่าได้รับข้อความ (ขณะนี้ฉันติดอยู่ในปัญหานี้)
Vaccano

10

ใน Oracle คุณสามารถใช้แพ็คเกจ DBMS_ALERTในตัวเพื่ออำนวยความสะดวก

DBMS_ALERT รองรับการแจ้งเตือนแบบอะซิงโครนัสของเหตุการณ์ฐานข้อมูล (การเตือน) ด้วยการใช้งานแพคเกจนี้และทริกเกอร์ฐานข้อมูลที่เหมาะสมแอปพลิเคชันสามารถแจ้งเตือนตัวเองเมื่อใดก็ตามที่มูลค่าความสนใจในฐานข้อมูลมีการเปลี่ยนแปลง

สมมติว่าเครื่องมือกราฟิกแสดงกราฟของข้อมูลบางอย่างจากตารางฐานข้อมูล เครื่องมือกราฟิกสามารถหลังจากอ่านและสร้างกราฟข้อมูลแล้วให้รอการแจ้งเตือนฐานข้อมูล (WAITONE) ที่ครอบคลุมข้อมูลที่เพิ่งอ่าน เครื่องมือนี้จะทำงานโดยอัตโนมัติเมื่อผู้ใช้รายอื่นเปลี่ยนแปลงข้อมูล สิ่งที่จำเป็นต้องมีก็คือทริกเกอร์จะถูกวางไว้บนตารางฐานข้อมูลซึ่งดำเนินการสัญญาณ (SIGNAL) เมื่อใดก็ตามที่มีการเรียกใช้ทริกเกอร์


และสำหรับ "MS SQL Server 2008" ตามคำถาม OPs พวกเขาขอ RDBMS อื่น ๆ แต่สิ่งนี้ไม่ได้ช่วย
gbn

9
@gbn ทำไมจึงไม่ช่วย ฉันไม่สามารถตอบส่วน SQL Server อย่างที่คุณทำได้ดังนั้นฉันจึงตอบส่วนที่ทำได้ ไม่มีใครเป็นผู้เชี่ยวชาญในฐานข้อมูลอื่น ๆ ทั้งหมด แต่ถ้าเราแต่ละคนมีส่วนร่วมในความรู้ของเราผู้เข้าร่วมและผู้เยี่ยมชมในอนาคตจะได้รับข้อมูลที่เป็นประโยชน์ ฉันคาดหวังว่า OP จะยอมรับคำตอบของ SQL Server และโหวตคำตอบที่มีประโยชน์อื่น ๆ เช่น ScottCher's (+1)
Leigh Riffel

พูดได้ดี. หลังจากอ่านคำตอบ DBMS_ALERT ของคุณฉันได้เรียนรู้วิธีการทำสิ่งนี้ - เครื่องมือเพิ่มเติมสำหรับกล่องเครื่องมือ! +1
ScottCher

7

ผู้จำหน่ายฐานข้อมูลบางรายยังให้บริการบัสข้อความแบบรวมที่แอปของคุณสามารถสมัครสมาชิกได้:

อีกทางเลือกหนึ่งคือการกำหนดเส้นทางข้อมูลไปยังฐานข้อมูลในตอนแรกผ่านบัสข้อความเช่นTibco / RVและเพียง "แยก" มันบนสตรีมไปยัง DB และหนึ่งไปยังแอปพลิเคชันของคุณหรือใช้เลเยอร์แคชเช่นCoherenceระหว่างแอปของคุณกับฐานข้อมูล


7

รับฟัง / แจ้งเตือนสำหรับ PostgreSQL

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

ในฐานข้อมูล ...

NOTIFY static_channel_name, 'static-message';

หรือในฟังก์ชั่น / ทริกเกอร์:

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

ในไคลเอนต์ฐานข้อมูล:

LISTEN some_channel_name; --note the lack of quotes

ไคลเอนต์ LISTEN จะได้รับรหัสกระบวนการ PostgreSQL ชื่อช่องทางและค่าข้อความ

ไดรเวอร์ JDBC มาตรฐานสำหรับ PostgreSQL ไม่ชอบการแจ้งเตือนอย่างไรก็ตามคุณสามารถใช้ไดรเวอร์https://github.com/impossibl/pgjdbc-ngเพื่อจุดประสงค์นี้


5

อีกโซลูชันของ Oracle: เราได้พัฒนาแอปพลิเคชันโดยใช้ dotnet framework จาก Microsoft ซึ่งใช้ประโยชน์จากคุณสมบัติการแจ้งเตือนการเปลี่ยนแปลงฐานข้อมูลของ Oracle ร่วมกับ ODP.Net (ผู้ให้บริการข้อมูล Oracle สำหรับ dotnet) เมื่อใช้สิ่งนี้ฐานข้อมูลจะแจ้งแอปพลิเคชัน dotnet เมื่อมีข้อมูลใหม่มาถึงทำให้เราสามารถหลีกเลี่ยงการทำโพลแบบคงที่ได้ ลิงก์ที่ฉันอ้างอิงด้านบนเป็นบทช่วยสอนของออราเคิลสำหรับการทำเช่นนั้น หวังว่านี่จะช่วยคุณได้

ไม่ทราบเกี่ยวกับ RDBMS อื่น ๆ


2

สำหรับหนึ่งในโปรแกรมของเรา (เข้าถึงราง Chrome และ Chrome เท่านั้น) เรากำลังใช้ MySQL ด้วยUDF sys_exec โดยทั่วไปทำไม Chrome - เนื่องจากการสนับสนุน WebSocket

เมื่อมีการอัพเดต / แทรก / ลบที่สำคัญเกิดขึ้นโปรแกรมภายนอกจะถูกเรียกใช้งานฟังก์ชั่น sys_exec ที่เพิ่มเข้ามาใหม่ซึ่งฝังอยู่ในทริกเกอร์บางตัว ณ จุดนี้เรามีทุกอย่างที่เราต้องการส่งต่อข้อความไปยังไคลเอนต์ที่เชื่อมต่อทุกคนโดยไม่จำเป็นต้องมีการสอบถามหรือสอบถามหลายครั้งเนื่องจากทุกอย่างเกิดขึ้นแบบเรียลไทม์


1

เราใช้การรวมกันของ Oracle GoldenGate และ Java Persistence API (JPA) เพื่อทำสิ่งนี้กับฐานข้อมูล Oracle แต่ยังรวมถึง DB2, Sybase, Microsoft SQL Server, MySQL, Teradata และอื่น ๆ คุณสมบัติอธิบายไว้ที่นี่: http: // docs .oracle.com / มิดเดิลแวร์ / 1212 / เชื่อมโยง / COHIG / golden_g.htm

สิ่งที่ GoldenGate ทำคือเปลี่ยนบันทึกธุรกรรมฐานข้อมูลเป็นสตรีมเหตุการณ์ที่สามารถกรองได้ซึ่งสามารถใช้ได้ทุกที่ทั่วทั้งเครือข่าย เราใช้เพื่อเปลี่ยนธุรกรรมที่เกี่ยวข้องเป็นการปรับปรุงแคชหรือการทำให้แคชใช้ไม่ได้ซึ่งทั้งสองอย่างสามารถเรียกใช้กิจกรรมระดับแอปพลิเคชันเช่นการผลักดันข้อมูลไปจนถึงเดสก์ท็อปหรือแอปพลิเคชัน websocket HTML5

(สำหรับการเปิดเผยอย่างสมบูรณ์ฉันทำงานที่ Oracle กับหนึ่งในผลิตภัณฑ์ที่ใช้ GoldenGate)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.