Selamunaleyküm yiğitler,
Kısa ve net bir soru soracağım
şimdi veritabanı kontrolü yapıyoruz, diyelim 5 saniye de bir. Ben yeni veri gelip gelmediğini nasıl anlayabilirim? İlk bir kere kontrol edip ordaki satır sayısını hafıza da tutmak doğru bir yöntem mi? Ama update olursa veri satır sayısı değişmemiş oluyor. Daha optimize bir çözüm var mıdır bunun için? Bir entity oluşturup veritabanına flag koymak doğru olabilir mi? O zaman da değişen ögenin flagini mi 1 yapmalıyım? Bu işi nasıl çözebiliriz? Böyle olursa da her seferinde komple veritabanını taramak gerekecek. Bununla ilgili ayrı bir flag tablosu yapıp ordan mı kontrol edilmeli ?

O --veri at, flag 1 yap--> VERİTABANI <---veri al, flag 0 yap--- O

Bu doğru bi yaklaşım mı?

soruldu: 14 Eki '14, 07:17

katil39's gravatar image

katil39
(üyeliği donduruldu)
cevap kabul oranı: 12%

değiştirildi: 15 Eki '14, 09:04

mahmut_can's gravatar image

mahmut_can ♦
2.9k62552


Bunun için değişikliklerin tutulduğu bir tablo işinizi görür sanırım. bir değişiklik yaptığınızda bu tabloya yazarsınız. değişiklikle ilgili verileri çektikten sonra da bu kaydı silersiniz. eğer bu tabloda sorguladığınız tabloya ait kayıt yoksa değişmemiş olarak kabul edebilirsiniz. şema da aşağı yukarı şöyle bir şey olabilir :

ID TableId ChangeType ChangeDateTime

1 2 0 2014-10-15 09:00:00

Her tablonuzun bir id si olabilir. veya tablo ismini de kullanabilirsiniz. ChangeType ı kendinize göre belirlersiniz. 0-insert, 1-update, 2-delete gibi. Eğer bu tabloda ilgili tabloya ait kayıt yoksa o tablo değişmemiş olarak kabul edebilirsiniz.

Aklıma ilk gelen bu oldu. Veri tabanı sunucularının bu işi yapan bir özelliği de olabilir. Bu konu hakkında bilgisi olan arkadaşlar bizimle paylaşırlarsa biz de faydalanmış oluruz.

permanent link

cevaplandı: 15 Eki '14, 02:41

huseying's gravatar image

huseying
301128
cevap kabul oranı: 30%

İşte burda sorguladığım konu bu oldu, ben tabloma bir timestamp entity' si yarattım, burda changed_on ile veri eklendiğinde ya da değiştirildiğinde zamanı giriliyor. Mesela ben 10 ar saniye aralıklarla sorgu yapıyorum diyelim, burada 10. saniyedeki sorgumda 0-10 arasında bir değişiklik olup olmadığına bakıyorum herhangi bir veride, silinen ögeler içinse silmeden bir flag ekliyorum. Fakat bu durumda her seferinde tüm tabloya bakıyor 0-10 zaman aralığında değişiklik var mı diye, bunu ayrı tablo da yapmak daha mı mantıklı?

(15 Eki '14, 08:41) katil39 katil39's gravatar image

Merhabalar,

bunun icin en iyi yöntemlerden biri TRIGGER ile olabilir.

Yapilan her degisiklik icin TRIGGER vastasi ile istenilen kayit yapilabilinir. Böylece yazmis oldugunuz uygulamayi kirletmeden yapmak istedginize ulasabilirisiniz.

Selamlar

permanent link

cevaplandı: 15 Eki '14, 04:39

mahmut_can's gravatar image

mahmut_can ♦
2.9k62552
cevap kabul oranı: 67%

Bana göre de en güzel çözümlerden birisi bu. Sorunun üslubundan dolayı cevap vermemiştim.

(15 Eki '14, 04:43) SaRPaRDa SaRPaRDa's gravatar image

ben uygulamanın değişiklikten haberdar olması olarak algılamıştım. sql server da sqldependency diye bir olay var. veritabanındaki değişikliklerden uygulama anında haberdar olabiliyor. mysql de böyle bir şey var mı bilmiyorum.

(15 Eki '14, 07:58) huseying huseying's gravatar image

scalability' e uymadığı için trigger kullanmayı düşünmüyorum. Veritabanının yatay büyüme göstermesi durumunda her veritabanı için ayrı ayrı trigger yazmak istemiyorum. Bunu sadece server da tek kodla halletmek istioyrum

(15 Eki '14, 08:35) katil39 katil39's gravatar image
1

scalability icin hic bir engel teskil ettigini düsünmüyorum. Uygulamak istediginiz mimari duruma bagli birsey. (Trigger tetikledgi zaman yapmak istediginiz isleme bagli)

SQL de oldugu gibi, triggeri de veritabanina yüklemek hic sorun degil.

Performance bakimindan bu cözüm, ilk verilen cözümden daha da hizli olacaktir.

Selamlar

(15 Eki '14, 09:03) mahmut_can ♦ mahmut_can's gravatar image
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×144

Soruldu: 14 Eki '14, 07:17

Görüntüleme: 790 kez

Son güncelleme: 16 Ara '14, 06:39

powered by BitNami OSQA