mysql de anlık veri nasil kontrol edilir?
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ı?
14 Eki '14, 07:17 katil39
15 Eki '14, 09:04
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.
15 Eki '14, 02:41 huseying
İş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)
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
15 Eki '14, 04:39 mahmut_can ♦
Bana göre de en güzel çözümlerden birisi bu. Sorunun üslubundan dolayı cevap vermemiştim.
(15 Eki '14, 04:43)
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)
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)
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)
Soruldu: 14 Eki '14, 07:17
Görüntüleme: 739 kez
Son güncelleme: 16 Ara '14, 06:39