Veritabanına En iyi Servis Islemi Nelerdir?
Veritabanına En iyi Servis Islemi Nelerdir?
Firebird Veritabanı ile yazılmıs bir Muhasebe Entegrasyonunda
Servis Islemleri icin Neler onerirsiniz
Örnegin Tam bir Faturanın Kaydedilmesi sırasında Elektrikler Kesilirse Fatura icerigindeki Hareketlerin bir kısmı commit edilip digerleri edilmesse Programımızın Veri bütünlügünü korumak icin nasıl bir Algoritma izlemeliyiz Servis Programı asamasında?
Örnegin Gercek Stok degeri ve Gercek Cari Degerleri nasıl hesaplatıcaz cünkü veri bütünlügü bu elektrik kesintisi sırasında bozulmus olabilir
Onerilerinizi Bekliyorum???
Iyi calısmalar
http://www.hedefyazilim.net
Servis Islemleri icin Neler onerirsiniz
Örnegin Tam bir Faturanın Kaydedilmesi sırasında Elektrikler Kesilirse Fatura icerigindeki Hareketlerin bir kısmı commit edilip digerleri edilmesse Programımızın Veri bütünlügünü korumak icin nasıl bir Algoritma izlemeliyiz Servis Programı asamasında?
Örnegin Gercek Stok degeri ve Gercek Cari Degerleri nasıl hesaplatıcaz cünkü veri bütünlügü bu elektrik kesintisi sırasında bozulmus olabilir
Onerilerinizi Bekliyorum???
Iyi calısmalar
http://www.hedefyazilim.net
- ender_arslanturk
- Kıdemli Üye
- Mesajlar: 709
- Kayıt: 18 Şub 2005 03:38
- Konum: İstanbul
Birde bu soruyu çözen kişide sizsiniz aslında
Nedenmi . Çünkü servis işin esas can alıcı noktasıdır. Çünkü olabilecek hataları kontrol etmek programı yazmaktan daha çok işdir. Mesela faturayı kaydet deyince örnek
1. Ft. Başlığına
2. Ft. hareketlerine
3. Stok başlığına (var ise)
4. stok hareketlerine
5. Stok depo toplarına (var ise)
6. Bağlı veritabanlarına göre tahminen 8-9 tane veri tabanını çok dikkatli yönetmek gerekir.
Ne yapmak lazım...
Öncelik ile program yazma aşamasında neleri nasıl attırıyor iseniz bunların tespiti. Ondan sonra olabilecek yanlış hatalara göre notların alınması. vb. gibi tespitler... Birde şunu herkez bilirki genelde servis veya bakım gibi programlar % 100 tamir yapmamaktadır. % 100 tamir işlemi zamanla olabilecek şeylerin eklenmesi ile çıkar...
@coderlord arkadaşın dediği gibi gerek yerel olsun gerek sunucu-istemci mimari olsun gerek ise uzak bağlantılarda olsun... Tümü ile sistemin bir UPS e ihtiyacı vardır. Veri bütünlüğünün maksimum korunması için bu şarttır.

Nedenmi . Çünkü servis işin esas can alıcı noktasıdır. Çünkü olabilecek hataları kontrol etmek programı yazmaktan daha çok işdir. Mesela faturayı kaydet deyince örnek
1. Ft. Başlığına
2. Ft. hareketlerine
3. Stok başlığına (var ise)
4. stok hareketlerine
5. Stok depo toplarına (var ise)
6. Bağlı veritabanlarına göre tahminen 8-9 tane veri tabanını çok dikkatli yönetmek gerekir.
Ne yapmak lazım...
Öncelik ile program yazma aşamasında neleri nasıl attırıyor iseniz bunların tespiti. Ondan sonra olabilecek yanlış hatalara göre notların alınması. vb. gibi tespitler... Birde şunu herkez bilirki genelde servis veya bakım gibi programlar % 100 tamir yapmamaktadır. % 100 tamir işlemi zamanla olabilecek şeylerin eklenmesi ile çıkar...
@coderlord arkadaşın dediği gibi gerek yerel olsun gerek sunucu-istemci mimari olsun gerek ise uzak bağlantılarda olsun... Tümü ile sistemin bir UPS e ihtiyacı vardır. Veri bütünlüğünün maksimum korunması için bu şarttır.

Veritabanı icin en iyi servis
Fatura Hareketlerini zaten tüm hareketlerin sonunda commit ediyoruz onda problem yok
Atıyorum fatura hareketleri commit edildi tam Fatura commit edilirken elektrik kesildi
Fatura kayıtsız ama baglı tabloda stok islemleri kayıt edilmis olucakki fatura cari hesap hareketleri icinde gozukmemesine ragmen ve stok hareketlerinde gozukmemesine ragmen stok seviyesi dusurulmus olucak
Iste bu gibi durumda
Gercek stok durumunu nasıl ve hangi verileri kullanarak eski haline cevirebiliriz(SERVİS İSLEMİ ESNASINDA NASIL BI MANTIK UYGULARIZ??)
Hala Buna bi öneri alamadım kimseden?
Atıyorum fatura hareketleri commit edildi tam Fatura commit edilirken elektrik kesildi
Fatura kayıtsız ama baglı tabloda stok islemleri kayıt edilmis olucakki fatura cari hesap hareketleri icinde gozukmemesine ragmen ve stok hareketlerinde gozukmemesine ragmen stok seviyesi dusurulmus olucak
Iste bu gibi durumda
Gercek stok durumunu nasıl ve hangi verileri kullanarak eski haline cevirebiliriz(SERVİS İSLEMİ ESNASINDA NASIL BI MANTIK UYGULARIZ??)
Hala Buna bi öneri alamadım kimseden?
selam
valla zaten yukarıda coderlord hocmaında belirttiği gibi
Ups kullanımı yoksa fatura esnasında kesilen bir proğramda dediğiniz gibi işlemler karışabilir.yada her yaptığınız kaydı post edersiniz.adam elektrikler kesilse bile o kayıtlar trancation vasıtasıyla tutulur..Adam proğramı açtığında,roolback veya duruma göre commit işlemlerini yaparsınız..bir nevi Xp deki sistemi ger yükleme mantığı...
valla zaten yukarıda coderlord hocmaında belirttiği gibi
Ups kullanımı yoksa fatura esnasında kesilen bir proğramda dediğiniz gibi işlemler karışabilir.yada her yaptığınız kaydı post edersiniz.adam elektrikler kesilse bile o kayıtlar trancation vasıtasıyla tutulur..Adam proğramı açtığında,roolback veya duruma göre commit işlemlerini yaparsınız..bir nevi Xp deki sistemi ger yükleme mantığı...

Re: Veritabanı icin en iyi servis
Tam commit esnasında elektrik kesilirse muhtemelen kayıt gerçekleşmeyecek ve VT yapısı bozulacaktır.hedefbusiness yazdı: Atıyorum fatura hareketleri commit edildi tam Fatura commit edilirken elektrik kesildi
Fatura kayıtsız ama baglı tabloda stok islemleri kayıt edilmis olucakki fatura cari hesap hareketleri icinde gozukmemesine ragmen ve stok hareketlerinde gozukmemesine ragmen stok seviyesi dusurulmus olucak
Şimdi programında faturayı commit ettikten sonra gidip cari hesapları ayarlıyorsun ve stok hareketlerini oluşturuyorsun.
Bunlarda ayrı ayrı commit yapmayacaksın.
Faturayı post ettikten sonra cari hareket ve stok hareketlerini de post edip en son işlem olarak commit etmelisin. Böyle bir toplu commit sayesinde bu tip hatalardan kurtulabilirsin. Çünkü commit gerçekleşmez ise ne faturalar VT'de yer alacaktır ne de stoktan düşülmüş olacaktır. Ancak commit edildiğinde VT'ye gerçekten yazılacaktır.
sayın coderlord
dediginiz Mantıklı ve zaten Benim yaptıgım olayda bu olucak buna emin olun Fakat
Olurda Bu sekilde bi problem olursa
Yani Toplu Commit olayında iken
Kaydet.click(son satırlardaToplu Commit)
1-Stokislem.commit....
----Elektrik Kesintisi-----
2-Fatura.commit
gibi bi durumda dedigim olay olucak tahmin edersenizki Milisaniyelik bir olay
Bu gibi bi olay gerceklestiginde Stok verisinin Gercek Degerini SERVİS ile hesaplatmak icin Nasıl bi mantık onerirsiniz ASIL ALMAK İSTEDİGİM ÖNERİ BU YÖNDe
Size tesekkur ederim ilgilendiginiz icin..
Olurda Bu sekilde bi problem olursa
Yani Toplu Commit olayında iken
Kaydet.click(son satırlardaToplu Commit)
1-Stokislem.commit....
----Elektrik Kesintisi-----
2-Fatura.commit
gibi bi durumda dedigim olay olucak tahmin edersenizki Milisaniyelik bir olay
Bu gibi bi olay gerceklestiginde Stok verisinin Gercek Degerini SERVİS ile hesaplatmak icin Nasıl bi mantık onerirsiniz ASIL ALMAK İSTEDİGİM ÖNERİ BU YÖNDe
Size tesekkur ederim ilgilendiginiz icin..
Re: sayın coderlord
Hmm. Sanırım başına böyle bir sorun geldi. Nasıl kurtulacağını düşünüyorsun.hedefbusiness yazdı:Stok verisinin Gercek Degerini SERVİS ile hesaplatmak icin Nasıl bi mantık onerirsiniz ASIL ALMAK İSTEDİGİM ÖNERİ BU YÖNDe

Her kaydın bir önceki değerini bir tabloda saklamadıkça böyle birşey yapamazsın. En iyi ihtimalle backup tan geri dönebilirsin. Söylediğin şey transactional bir VT'de çok mantıksız. Transaction'ların icad edilme sebebi bu gibi sorunlardan kurtulmaktır çünkü.
-
- Kıdemli Üye
- Mesajlar: 395
- Kayıt: 22 Tem 2004 09:15
- Konum: İzmir
- İletişim:
Selam,
Bu bahsettiğiniz sorun, 1989 yılında kullandığımız Btrieve de bile TTS adıyla yeralan transaction mekanizması sayesinde oldukça uzun zaman önce aşılmıştır. Commit sırasındaki kesintide de etkilenmezsiniz zira transaction içindeki bilgiler db üzerinde farklı bir alana yazılır sonra asıl page lere taşınır. Taşıma işlemi bitmedikçe taşındı diye işaretlenmez. Eğer uygulamanıza bir servis yazmak ihtiyacı duyuyorsanız, tasarımınız baştan yanlış demektir. Her türlü yazma işlemi mutlaka bir transaction bloğu içinde olmalıdır.
Eğer servise ihtiyacınız oldu ise size kimse genel geçer bir servis modeli öneremeyecektir. Önerenler de öylesine tahmin etmiş olacaktır. Sırf cevap yazmış olmak için yazmadığımı, bu konuda problemi olanların dikkatini çekmek için yazdığımı belirtmek isterim. Çok önemli, hatta olmazsa olmaz bir konudur.
Bu bahsettiğiniz sorun, 1989 yılında kullandığımız Btrieve de bile TTS adıyla yeralan transaction mekanizması sayesinde oldukça uzun zaman önce aşılmıştır. Commit sırasındaki kesintide de etkilenmezsiniz zira transaction içindeki bilgiler db üzerinde farklı bir alana yazılır sonra asıl page lere taşınır. Taşıma işlemi bitmedikçe taşındı diye işaretlenmez. Eğer uygulamanıza bir servis yazmak ihtiyacı duyuyorsanız, tasarımınız baştan yanlış demektir. Her türlü yazma işlemi mutlaka bir transaction bloğu içinde olmalıdır.
Eğer servise ihtiyacınız oldu ise size kimse genel geçer bir servis modeli öneremeyecektir. Önerenler de öylesine tahmin etmiş olacaktır. Sırf cevap yazmış olmak için yazmadığımı, bu konuda problemi olanların dikkatini çekmek için yazdığımı belirtmek isterim. Çok önemli, hatta olmazsa olmaz bir konudur.
Doğan Zorlu, İzmir
------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
SAYIN DOGAN ZORLU BEY
Demek istediginiz olayı anladım anlamasına ancak dediginiz gibi bi transaction blogu algoritması sizin orneklemenizle ne olur
Yani Fatura+Faturahareket tablosu var diyelim burada Transaction blogu nasıl olmalıdır sizce
Ör :-------------------
Önce ,
Fatura commit edilmeli eger edilebilirse Faturahareket commit edilsin.... gibi bi kod blogumu bi örnek verebilirseniz sevinirim....... Boylelikle Servis Programınada ihtiyacımız kalmaz ...
Yani Fatura+Faturahareket tablosu var diyelim burada Transaction blogu nasıl olmalıdır sizce
Ör :-------------------
Önce ,
Fatura commit edilmeli eger edilebilirse Faturahareket commit edilsin.... gibi bi kod blogumu bi örnek verebilirseniz sevinirim....... Boylelikle Servis Programınada ihtiyacımız kalmaz ...
-
- Kıdemli Üye
- Mesajlar: 395
- Kayıt: 22 Tem 2004 09:15
- Konum: İzmir
- İletişim:
Selam,
Commit ile kayıt birbirinden farklıdır. Her işlem yapılır yapılmaz kaydedilir. İşlemler bittiğinde ise commit edilir. Örneğin;
StartTransaction;
Fatura Kaydet (dikkat commit değil)
Kalemleri Kaydet
Depo Toplamlarını güncelle
Cari Tabloları yapılandır
Gerekiyorsa irsaliyesini oluştur
Ödeme planı otomatik burdan yapılıyorsa onu oluştur
End Transaction;
Şeklinde yapmalısınız. Herbir satır kendi içinde commit edilmemelidir. Bir de herhangi bir hata olduğunda, rollback etmeniz çok önemli.
Commit ile kayıt birbirinden farklıdır. Her işlem yapılır yapılmaz kaydedilir. İşlemler bittiğinde ise commit edilir. Örneğin;
StartTransaction;
Fatura Kaydet (dikkat commit değil)
Kalemleri Kaydet
Depo Toplamlarını güncelle
Cari Tabloları yapılandır
Gerekiyorsa irsaliyesini oluştur
Ödeme planı otomatik burdan yapılıyorsa onu oluştur
End Transaction;
Şeklinde yapmalısınız. Herbir satır kendi içinde commit edilmemelidir. Bir de herhangi bir hata olduğunda, rollback etmeniz çok önemli.
Doğan Zorlu, İzmir
------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
Dogan Hocam Hep Soruyorum Kusuruma Bakmayın....
Dediginiz Gibi yaparsak kod blogu solemi olucak
Once Fatura.starttransaction //deyip baslıyacagız
kalem
cari
depo / islemlerini post ettirip commitmi edicez?
en sonda
fatura.endtransaction //deyip faturayı commit edicez sanırım dimi
Birde tüm bu tablolar fatura Tablosuna baglı oldugu icin fatura tablosu commit edilmesse diger veriler commit edilse bile veriler islenirmi?
Birde Rollback demissiniz ben Default action olarak Rollback kullandıgımdan herhangi bi sekilde commit edilmedigi sürece zaten yazım islemi olmuyor...
Dogan bey cevaplarınız benim icin cok degerli bekliyorum....
Once Fatura.starttransaction //deyip baslıyacagız
kalem
cari
depo / islemlerini post ettirip commitmi edicez?
en sonda
fatura.endtransaction //deyip faturayı commit edicez sanırım dimi
Birde tüm bu tablolar fatura Tablosuna baglı oldugu icin fatura tablosu commit edilmesse diger veriler commit edilse bile veriler islenirmi?
Birde Rollback demissiniz ben Default action olarak Rollback kullandıgımdan herhangi bi sekilde commit edilmedigi sürece zaten yazım islemi olmuyor...
Dogan bey cevaplarınız benim icin cok degerli bekliyorum....
-
- Kıdemli Üye
- Mesajlar: 395
- Kayıt: 22 Tem 2004 09:15
- Konum: İzmir
- İletişim:
Selam,
Tablolarınızın Transaction nesnesi aynı ise bu söylediğiniz şey doğrudur. Herbir tablo için ayrı transaction nesnesi kullanırsanız olmaz. Bu nedenle bir arada işlem görecek tabloların transaction nesneleri aynı olmalıdır.
Rollback için şöyle düşünün;
Bir fatura kaydediyordunuz bir kontrolde birşeyin hatalı olduğunu gördünüz ve kullanıcıya bir mesaj verip geri döndünüz. Kullanıcı vazgeçip yenisini girmeye çalıştı. Transaction hala açık ve rollback edilmemiş olduğundan bu kez eğer commit e kadar giderseniz, bir önceki faturada geri döndüğünüz yere kadar db ye yazılanlar da commit edilecektir.
Tablolarınızın Transaction nesnesi aynı ise bu söylediğiniz şey doğrudur. Herbir tablo için ayrı transaction nesnesi kullanırsanız olmaz. Bu nedenle bir arada işlem görecek tabloların transaction nesneleri aynı olmalıdır.
Rollback için şöyle düşünün;
Bir fatura kaydediyordunuz bir kontrolde birşeyin hatalı olduğunu gördünüz ve kullanıcıya bir mesaj verip geri döndünüz. Kullanıcı vazgeçip yenisini girmeye çalıştı. Transaction hala açık ve rollback edilmemiş olduğundan bu kez eğer commit e kadar giderseniz, bir önceki faturada geri döndüğünüz yere kadar db ye yazılanlar da commit edilecektir.
Doğan Zorlu, İzmir
------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
Mrb, yani şekil şunu benzer olacak;
iyi çalışmalar.
Kod: Tümünü seç
try
StartTransaction;
VeriKaydetme1;
VeriKaydetme2;
Commit;
except
Rollback;
end;
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr