2015-07-13 40 views
5

Bir SQL Server veritabanındaki çeşitli tablolardaki dış veri değişikliklerini bildirme gereksinimimiz var. İzlenecek verilerin seçimi, kullanıcının kontrolü altındadır (desteklediklerimizin bir listesini seçer). Bildirimlerin alıcıları yerel olarak bağlı bir ağda (yani aynı veri merkezinde) olabilir veya uzak olabilirler."Gerçek Zaman" veri değişikliği algılama

Şu anda bunu, gerçek bildirim gerçekleştiren bir Windows hizmeti tarafından izlenen bir Hizmet Aracısı kuyruğundaki değişiklikleri ve kuyruk bildirimlerini algılayan veri erişim katmanımızdaki uygulama koduyla ele aldık. Oldukça gerçek zaman değil ama yeterince yakın.

Bu, bazı bakım sorunlarına sahip olduğunu kanıtlamıştır, bu nedenle SQL Server'da yerleşik olarak bulunan değişiklik algılama mekanizmalarından birini kullanmayı düşünüyoruz. Ne yazık ki baktım olanlardan hiçbiri (ben bütün bunları incelemiştik düşünüyorum) çok iyi uyum görünmektedir:

Değiştir veri yakalama ve Değişim İzleme: Başlıca sorun, değişiklikleri belirlemek için taramayı yakalanan bilgiye ihtiyaç olmasıdır Bu alıcılara iletilecek. Bunun çok fazla yük getireceğinden şüpheleniyorum.

Bildirim Hizmetler: Temel olarak SQL Server'ı bir web sunucusu olarak kullanır ve bu da korkunç bir lisans kaybıdır. Ayrıca, ağda güvenlik açısından kabul edilemez olan en az iki güvenlik duvarı üzerinden erişim gerektirir.

Sorgu Bildirimi: En muhtemel aday gibi görünüyor, ancak izlemek için veri öğelerini dinamik olarak seçerek kendini iyi hissetmiyor. veri değişimine gerçekten uygulanamaz veritabanı veya örnek düzeyinde etkinlikler üzerinde bildirmek için tasarlanmıştır: Her bildirim gönderildikten sonra sorguyu yeniden kayıt ihtiyacı biz tescilleri

Olay Bildirimi yönetmek ile meşgul SQL Server tutmak anlamına gelir tespiti.

Buraya geldiğim en iyi fikir CDC'yi kullanmak ve değişiklik veri tablolarına insert tetikleyicileri koymaktır. Tetikleyiciler, bildirimleri gerçekleştirmek için başka bir kod tarafından işlenecek bir Hizmet Aracısı sırasına bir şey sıraya koyardı. Bu aslında, değişiklik tespitini yapmak için bir SQL Server özelliği kullanmak dışında yaptığımız şeydir. Bu tablolara tetikleyici ekleyebileceğinizden bile emin değilim, ancak bir POC ile çok fazla zaman geçirmeden önce geri bildirim alacağımı düşündüm.

Bu işin yapılması için korkunç bir dolambaçlı yol gibi görünüyor. İşi daha kolaylaştıracak veya bu özelliklerden birini yanlış yorumlayabilecek bir şey mi var?

Teşekkürler ve bu sorunun uzunluğu için özür dileriz.

+0

Açıklandığı gibi clr kodunu yürütebilir Service Broker ile hangi sorunları yaşıyorsunuz? Aksi halde önerdim… –

+0

Özellikle Service Broker ile ilgili sorunları görmüyoruz. Bu sorunun amacı, değişiklik tespitinin daha temiz, daha evrensel bir şekilde nasıl gerçekleştirileceğidir. –

cevap

0

Neden güncelleştirme kullanmıyor ve tetikleyiciler eklemiyorsunuz? Bir tetikleyici, enter link description here

+0

Onları düşündüm ve en iyi çözüm olarak ortaya çıkabilirler. Muhtemelen kabul edilebilirler çünkü herhangi bir veriyi değiştirmeyeceklerdi - sadece bir Hizmet Aracısı kuyruğuna veya benzer bir şeye bir şey koyarak. Diğer özelliklerden birinin de bazı önemli avantajlar sağlayacağını ya da en azından “neden tetikleyicileri kullanıyorsunuz” tartışmalarından kaçınacağını umuyordum. –

+0

Tetikleyiciler kötü değil, çoğu şey gibi kötü bir şekilde kullanılabilirler. Tetikleyiciler kötü bir şekilde kullanıldığında, büyük performans sorunlarına ve en garip hatalara neden olabilir. Ama onları doğru kullandığınızda çok yardımcı olabilirler. – Luc

İlgili konular