2015-04-29 29 views
5

afaik ile Memcached senkronize nasıl uygulanacağı, Memcached (en azından SQL Server ve Oracle) veritabanı ile senkronizasyon desteklemez. Memcached'i (ücretsiz) OLTP veritabanımızla kullanmayı planlıyoruz.veritabanı

Bazı iş süreçlerinde, veri tabanından çok miktarda veri gerektiren bazı ağır doğrulamalar yaparız, verilerin değiştirilip değiştirilmediğini bilmediğimizden bu verilerin statik kopyasını saklayamayız, böylece her seferinde veriyi alırız. işlemi yavaşlatır.

olası bir çözüm olabilir

  1. Yaz/güncelleme öneki-postfixed (tablo-PK1-PK2-PK3 sütunlu) kayıtlarının değişikliği dosyalar
  2. dosyanın bu değişikliği Monitör oluşturmak için veritabanı üzerinde tetikler tuşuna (tablo-PK1-PK2-PK3 sütunlu) FileSystemWatcher kullanarak ve sona veri

sorun güncellenmesini: 10 saat verilerin herhangi bir kombinasyonunu kullanarak yaklaşık 100.000 kullanıcı var olacaktır. Yani çok fazla dosyaya sahip olacağız. categ1-subcateg5-subcateg-78-data100, categ1-subcateg5-subcateg-78-data250, categ2-subcateg5-subcateg-78-data100, categ1-subcateg5-subcateg-33-data100 vb

Ben 5 bekliyorum en az milyon dosya. Şimdi

Diğer olasılıklar

  1. çağrı bitirmek için beklemeden
  2. çağrıyı tetikleyici bir exe süresi dolmuş olan anahtar geçen tetikleyiciden uyumsuz bir web hizmeti ve :(acıklı bir çözüm arar o zaman bu exe ​​anahtarı ölürlerdi. (Ben Oracle'ın tetikleyici bir exe çağıran biraz zor görünüyor, SQL Server bu yaklaşımın bir exe aramaya xp_cmdsell kullanarak bazı başarılar var)

Hala kulağa hoş geliyor değil mi?

Herhangi akıllı öneri

+0

Birkaç soru. Oracle veya Sql Server için mi, yoksa ikisi de mi olmalı? Tablo (lar) hızla veya yavaşça değişiyor mu? Bunun için hiç bütçeniz var mı? – tbone

+0

@tbone Her ikisi için olmalı ve bunu desteklemeyi planlıyorsak başka bir DB için de çalışmalıdır. Değişiklikler hızlı ve Gerçek Zamanlıdır. Benim için bu çözüm önermek benim için bir bütçe yok – bjan

+1

Her iki veritabanı platformları ile çalışması gereken bir "genel" çözüm gerektirmez Çok kötü, Oracle kurulumunda yapabileceğiniz şeyler kesinlikle vardır (sonuç önbellek, kullanarak SSD, vb. Ayrıca, bu hızla değişen bir tablodursa, önbelleğinizi sürekli geçersiz kılacak ve yine de yeniden yüklemeniz gerektiğinden, uygulama yan önbelleğinin en iyi yaklaşım olduğundan emin değilim. – tbone

cevap

3

MS SQL Server belki size yararlı olmak "Değiştir İzleme" özelliklere sahiptir lütfen. Veritabanını değişiklik izleme için etkinleştirin ve izlemek istediğiniz tabloları yapılandırın. Daha sonra SQL Server, her güncellemede değişiklik kayıtları yaratır, bir tabloya ekler, siler ve son kontrol ettiğiniz zamandan beri yapılan kayıtlardaki değişiklikleri sorgulamanızı sağlar. Bu, değişiklikleri senkronize etmek için çok yararlıdır ve tetikleyicileri kullanmaktan daha verimlidir. Ayrıca, kendi izleme tablolarınızı oluşturmadan yönetmek daha kolaydır. Bu SQL Server beri tabloların birincil anahtarları yakalar ve en değiştirilmiş olabilecek alanlar sorgu izin sadece izleme 2005.

How to: Use SQL Server Change Tracking

Değişim bir özelliği olmuştur. Ardından mevcut verileri almak için tabloları bu tuşlara birleştirebilirsiniz. Verileri yakalamak için de Değiştir'i kullanabilirsiniz, ancak daha fazla yükü ve en azından SQL Server 2008 kurumsal sürümünü gerektirir.

Change Data Capture

Ben Oracle ile hiçbir deneyime sahip, ama aynı zamanda da bazı izleme özelliğe sahip olabilir inanıyoruz.seni alabilirsiniz Bu makale başladı: Memcached kullanılması zorunlu olup olmadığını

20 Using Oracle Streams to Record Table Changes

+0

Uygulamamın değişiklikle ilgili bilgilendirilmesini istiyorum, Değişim İzleme veritabanı düzeyinde kalır. – bjan

+0

Bu doğru, sadece veri değişikliklerini toplama aracı. Zamanlanmış bir aralıkta değişiklikleri toplamak için sorguları kullanırdınız. Yarar, değişiklikleri kontrol etmek zorunda kalmamanızdır, sadece son kontrolünüzden bu yana değişen kesin kayıtları sorgulamanız gerekir, bu yüzden hızlıdır. Ayrıca tüm işlemsel olduğu için sağlamdır; herhangi bir değişikliği kaçırmayacaksınız.Uygulamanızın denetimi gerçekleştirmesini istemiyorsanız, bunu başka bir hizmet programına yükleyebilir veya yalnızca zamanlanmış bir aralıkta saklı bir yordamı çalıştırabilir ve ardından Hizmet Aracısı ileti sıraları gibi başka bir bildirim yöntemini kullanabilirsiniz. –

+0

@BrianPressler, Oracle'ın [Veritabanı Değişikliği Bildirimi] vardır (http://docs.oracle.com/cd/E11882_01/java.112/e16548/dbchgnf.htm#JJDBC28815). Uygulamalarımdan birinde Java ile kullandım. –

3

O (bana) net değil. Kişisel olarak bunu önlerim ve bunun yerine SqlDependency ve OracleDependency kullanın. İkisi de bir db komutunu iletmeye izin verir ve komutun döndüreceği veriler değiştiğinde bildirim alır.

Memcached zorunlu ise, hala bu iki sınıfı geçersiz kılma tetiklemek için kullanabilirsiniz.

+0

[this] 'den (http://stackoverflow.com/questions/14203704/using-sqldependency-vs-periodic-polling-of-a-table-performance-impact) ve [bu] (http://stackoverflow.com/questions/22660825/net-sqldependency-ile-çok-bildirimleri-vs-yüksek oran-polling) yüksek bir değişiklik oranı ile bir OLTP veritabanı için iyi bir çözüm olmayacak gibi görünüyor. [Bu bir] (http://www.codeproject.com/Articles/144344/Query-Notification-using-SqlDependency-and-SqlCach) bile DB'yi% 43 oranında yavaşlatacağını belirtiyor. – bjan

+0

İlginç bağlantılar, ancak veri sık sık değiştiğinde, önbelleğe alma çözümü mükemmel bir çözüm olabilir. – MatteoSp

İlgili konular