Firebird,ibTable ve Performans
Re: Firebird,ibTable ve Performans
Firebirdde ibtable dan uzak dur, ibtable tüm bilgileri çekip, onlar üzerinde filtre yapar. Dogru bileşen ibdatasettir. Ibdataset in selectsq ini istedigin dosyaları seçmek için kullanabilirsin. Çok daha performanslıdır, sorgulamayı firebird de yapıp, gerektigi kadar kayıt getirir.
Birden fazla veritabani olmasının dezavantajları vardır, öncelikle bu tablolar arasında join işlemleri yapamazsın, ayrıca her veritabani baglantısı için ekstra bufferlar açılır. Yedekleme, transaction vs her veritabanı için ayrı ayrı yapılmalıdır.
Kısaca ibtable dan uzak dur, ibdataset kullan ve tabloları tek bir veritabanında tut.
Birden fazla veritabani olmasının dezavantajları vardır, öncelikle bu tablolar arasında join işlemleri yapamazsın, ayrıca her veritabani baglantısı için ekstra bufferlar açılır. Yedekleme, transaction vs her veritabanı için ayrı ayrı yapılmalıdır.
Kısaca ibtable dan uzak dur, ibdataset kullan ve tabloları tek bir veritabanında tut.
Re: Firebird,ibTable ve Performans
Bunca zaman ibtable kullanmıştım firebird çıkmadan önce msaccess ile yaptığım çalışmalarda da adotable bileşenini hatta ondan önce BDE ile de table kullanıştım
sanırım bu table işi bende hastalık oldu yada kötü bi alışkanlık diyelim peki ibdataset ile ilk defa bir uygulama geliştireceğim ilk nerden başlamalıyım sistemi nasıl geliştirmeliyim,program açılınca benım hazırladığım formlardan birisinde kayıtlarla ilgili işlemler yapılacak diyelim bunun için nasıl bir yol izlemeliyim.kayıtlar nasıl ve neye göre çekilmeli vs.

UWESIS CORPORATION
Re: Firebird,ibTable ve Performans
ibdataset in selectsql ine görmek istedigin kayıtları verirsin. Daha sonra ibdataset in üzerine sag tıklayıp dataset editor e girip, key i ve kullanmak istedigin fieldları seçip, generate sql yaparsın. Bu işlem insert, delete ve update için gerekli sql leri oluşturur.
Selectsql.text:='select * from cari ';
Yazarak tüm stokları getirebilirsin. Bu aslında table gibi bütün kayıtları getirir, o yüzden çok yerinde bir davranış degildir. 100-1000 kayıtta sorun çıkmaz, ama kayıt sayısının 100.000 leri buldugu durumda veya internet üzerinden programı kullanmak istersen ciddi anlamda network trafigi oluşturur ve son derece gereksizdir. Kimse 100.000 kaydı aynı anda incelemek istemez. Bu nedenle tablo yu açmadan önce bir süzme ekranı tasarlamak yerinde olur. Diyelim, cari kartına girilecek, oraya bazı seçenekler koyabiliriz.
* Kayıt tarihi şu tarihten sonraki cariler,
* isminde ahmet geçen cariler,
* adresi izmir olan cariler,
* kod u C-1001 ile C-5001 arası olan cariler
* En son seçenekte tüm carileri getir olabilir.
Bu şekilde tasarlamak hem kullanan açısından, hem de program açısında daha verimli olur. Kullanıcı gereksiz yere tüm kayıtlara ulaşmaz ve istedikleri kayıtları süzebilmiş olur. Sınırlı sayıda kayıt getirildigi için programın internet üzerinden kullanılması da son derece hızlı ve kolay olur.
http://www.rasyonelyazilim.com adresinde benim yazdıgım emlak programının demosunu http://www.rasyonelyazilim.com/filess/demozip.exe adresinden indirip, inceleyebilirsin. Orada kayıtlar açılmadan önce süzmeler yapılabiliyor. Süzmeler direk formun üzerinde, ayrıca bir pencere açılmıyor.
Selectsql.text:='select * from cari ';
Yazarak tüm stokları getirebilirsin. Bu aslında table gibi bütün kayıtları getirir, o yüzden çok yerinde bir davranış degildir. 100-1000 kayıtta sorun çıkmaz, ama kayıt sayısının 100.000 leri buldugu durumda veya internet üzerinden programı kullanmak istersen ciddi anlamda network trafigi oluşturur ve son derece gereksizdir. Kimse 100.000 kaydı aynı anda incelemek istemez. Bu nedenle tablo yu açmadan önce bir süzme ekranı tasarlamak yerinde olur. Diyelim, cari kartına girilecek, oraya bazı seçenekler koyabiliriz.
* Kayıt tarihi şu tarihten sonraki cariler,
* isminde ahmet geçen cariler,
* adresi izmir olan cariler,
* kod u C-1001 ile C-5001 arası olan cariler
* En son seçenekte tüm carileri getir olabilir.
Bu şekilde tasarlamak hem kullanan açısından, hem de program açısında daha verimli olur. Kullanıcı gereksiz yere tüm kayıtlara ulaşmaz ve istedikleri kayıtları süzebilmiş olur. Sınırlı sayıda kayıt getirildigi için programın internet üzerinden kullanılması da son derece hızlı ve kolay olur.
http://www.rasyonelyazilim.com adresinde benim yazdıgım emlak programının demosunu http://www.rasyonelyazilim.com/filess/demozip.exe adresinden indirip, inceleyebilirsin. Orada kayıtlar açılmadan önce süzmeler yapılabiliyor. Süzmeler direk formun üzerinde, ayrıca bir pencere açılmıyor.
Re: Firebird,ibTable ve Performans
Hocam çok teşekkür ediyorum tavsiyeleriniz için şu anda programın interface tasarımının aşamasındayım veritabanı bağlantısı düzeyine geldiğimde bi sorun olursa tekrar sorunlarımı belirtirim Tekrar teşekkürlerimi sunarım. Kolay gelsin
UWESIS CORPORATION
Re: Firebird,ibTable ve Performans
Bu arada söylemeyi unuttum programınız oldukca güzel olmuş umarım istediğiniz başarıyı yakalarsınız
ayrıca kullandığınız bileşenler neler öğrenmemede bi sakınca varmı sadece arayüz bileşenlerinden bahsediyorum

UWESIS CORPORATION
Re: Firebird,ibTable ve Performans
Selamlar,
Aslında TTable gibi nesneler kullanılırken şunları göz önünde bulundurmalısınız, Siz herhangi bir şeyi TTable'dan istediğinizde önce TTable (Tüm Kayıtları Yükle seçeneğini seçmediyseniz) yapacağı iş için önce kaydın belleğinde olup olmadığını kontrol eder, daha sonra yoksa o kayıtları yükler ve sonra sizin istediğiniz işlemi gerçekleştirir. Bu sebeple, TTable türü nesneleri kullanırken dikkatli olmak lazım !...
Aslında yapacağınız işleri, örneğin Kayıt silmeyi, Doğrudan TQuery nesnelerine yönelndirin, Table nesneleri yavaş olur. Ayrıca Database bir Deniz'dir, siz bu denizden ne kadar su çekmeye çalışırsanız işiniz o kadar hızlanır/yavaşlar. Eğer bir bardak su çekecekseniz kolayca halledebilirsiniz, ama Kamyonla su çekmeye kalkarsanız işiniz uzun sürer. Bu sebeple gönderdiğiniz sorgularda özellikle şunlara dikkat edin,
1. Sadece işinizi olduğu tablolara erişin,
2. Sadece işinizin olduğu tablo alanlarına erişin,
3. Sadece işinizi olduğu kayıtları filtreleyin ve onları getirin,
4. Indexlerinizi nerelerden filtreleme yapacaksanız o alanlara göre düzenleyin, Örneğin Tarih ve Müşteri ID'ye göre filtrelenen bir tablo için Tarih + Müşteri ID şeklinde bir index yapın, (denemedim ama ayrıca Müşteri + Tarih şeklinde de bir index yapın ki FB duruma göre en hızlısını kendi tayin edebilsin.)
Ayrıca şurada yazdıklarımı da bir oku,
viewtopic.php?f=18&t=581&p=3002&hilit=paradox#p3002
5. Elinden geldiğince sadece işin olan kayıtları elleçle, gereksiz Network trafiği oluşturma, server'ı oyalama. Eğer Döngülerle bir takım şeyler yapıp bilgileri güncelleyeceksen, bu tür işlemleri SP'lere at. Server kendi içerisinden en az 100 kat hızlı yapacaktır işin (100 kat dedim, çokluktan kinayedir yanlış anlaşılmasın)
6. Ayrıca, oluşturduğun DB'lerde İlişkilere dikkat et, data tekrarı yapma, tablolarındaki alan sayısını fazla tutma. İlişkilerle oluştur büyük dataları.
Vs. vs..
Kolay Gelsin
Aslında TTable gibi nesneler kullanılırken şunları göz önünde bulundurmalısınız, Siz herhangi bir şeyi TTable'dan istediğinizde önce TTable (Tüm Kayıtları Yükle seçeneğini seçmediyseniz) yapacağı iş için önce kaydın belleğinde olup olmadığını kontrol eder, daha sonra yoksa o kayıtları yükler ve sonra sizin istediğiniz işlemi gerçekleştirir. Bu sebeple, TTable türü nesneleri kullanırken dikkatli olmak lazım !...
Aslında yapacağınız işleri, örneğin Kayıt silmeyi, Doğrudan TQuery nesnelerine yönelndirin, Table nesneleri yavaş olur. Ayrıca Database bir Deniz'dir, siz bu denizden ne kadar su çekmeye çalışırsanız işiniz o kadar hızlanır/yavaşlar. Eğer bir bardak su çekecekseniz kolayca halledebilirsiniz, ama Kamyonla su çekmeye kalkarsanız işiniz uzun sürer. Bu sebeple gönderdiğiniz sorgularda özellikle şunlara dikkat edin,
1. Sadece işinizi olduğu tablolara erişin,
2. Sadece işinizin olduğu tablo alanlarına erişin,
3. Sadece işinizi olduğu kayıtları filtreleyin ve onları getirin,
4. Indexlerinizi nerelerden filtreleme yapacaksanız o alanlara göre düzenleyin, Örneğin Tarih ve Müşteri ID'ye göre filtrelenen bir tablo için Tarih + Müşteri ID şeklinde bir index yapın, (denemedim ama ayrıca Müşteri + Tarih şeklinde de bir index yapın ki FB duruma göre en hızlısını kendi tayin edebilsin.)
Ayrıca şurada yazdıklarımı da bir oku,
viewtopic.php?f=18&t=581&p=3002&hilit=paradox#p3002
5. Elinden geldiğince sadece işin olan kayıtları elleçle, gereksiz Network trafiği oluşturma, server'ı oyalama. Eğer Döngülerle bir takım şeyler yapıp bilgileri güncelleyeceksen, bu tür işlemleri SP'lere at. Server kendi içerisinden en az 100 kat hızlı yapacaktır işin (100 kat dedim, çokluktan kinayedir yanlış anlaşılmasın)
6. Ayrıca, oluşturduğun DB'lerde İlişkilere dikkat et, data tekrarı yapma, tablolarındaki alan sayısını fazla tutma. İlişkilerle oluştur büyük dataları.
Vs. vs..
Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Re: Firebird,ibTable ve Performans
Hocam gerçekten güzel tavsiyeler ayrıca linkteki anlatımınızda gayet güzeldi bunları ayrıca örnek alarak tasarlayacağım veritabanlarımı çok teşkkür ediyor,kolaylıklar diliyorum.
UWESIS CORPORATION
-
- Kıdemli Üye
- Mesajlar: 1223
- Kayıt: 26 Nis 2005 04:08
Re: Firebird,ibTable ve Performans
Bence doğru bileşen IBDataset (ya da Dataset) de değil, Query nesnesi...
Re: Firebird,ibTable ve Performans
ben eskiden query denince aklımda hiçbirşey oluşmazdı ama sorgulara ve verdiği sonuçlara bakınca table nesnesinden daha karalı oldugunu gördüm ve sayenizdedir ki (Çok teşekkürler) bu bileşene geçme kararı aldım yardımlarınızın dokunacağı iletilerinizi yazarsanız sevinirim
Kolay gelsin.
Kolay gelsin.
UWESIS CORPORATION
Re: Firebird,ibTable ve Performans
TQuery Nesnesini kullanırken aklında bulunsun, TUpdateSQL diye bir yardımcı nesnesi vardır onun. Bu sayede TQuery (Readonly) olmasına karşın, TUpdateSQL nesnesi yardımıyla, Query'lerini Update, Delete ve Insert yapabilir hale getirebilirsin. Emin ol TTable'dan çok daha hızlı olacaktır.
TUpdateSQL'i araştırmanı tavsiye ederim, örnekler bulup incele !... Ahan da aradığım şey buydu, süper oldu diyeceksin

Kolay Gelsin
TUpdateSQL'i araştırmanı tavsiye ederim, örnekler bulup incele !... Ahan da aradığım şey buydu, süper oldu diyeceksin


Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Re: Firebird,ibTable ve Performans
Bi insan bu kadar haklı olur emin olun query ve updatesql kullanmaya başladım yaklaşık 2 gün oldu siz queryi tavsiye ettikten sonra araştırıp buldum onpost eventinde felan neler yapılır ama gerçekten ben bunca zaman TTable ile boşuna uğraşmış proje hazırlamışım Query çok hoşuma gitti sorgular felan
Queryi tavsiye ettiğiniz için çok teşekkür ederim
Ahan da aradığım şey buydu, süper oldu


UWESIS CORPORATION
Re: Firebird,ibTable ve Performans
Örnek açısından işlemlerimi şu şekilde yapıyorum :
İhtiyacı olan arkadaşların yararlanması adına yazıyorum umarım bi yanlışlık yoktur.
Kod: Tümünü seç
Ekle:
IBQuery1.open;
IBQuery1.insert;
Afterpost ve After Delete Eventinde
IBQuery1.applyupdates;
Kaydet:
IBQuery1.open;
IBQuery1.post;
Sil:
IBQuery1.Delete;
Düzenle:
IBQuery1.Edit;
UWESIS CORPORATION
Re: Firebird,ibTable ve Performans
Selamlar.
Firebird veritabanını kullanacaksanız bence yol yakınken IBX componentlerinden kurtulup FIBPlus yükleyin. IBX, Interbase veritabanı için hazırlanmıştır. Her ne kadar Interbase ve Firebird benzer yapıda gözüksede Firebird 2.0 versiyonunun çıkması ile aradaki farklılıklar çoğalmaktadır. Bu sorunlarla hiç karşılaşmama ihtimalide var tabi ama şimdiden önlem alınmasında fayda var derim.
Kolay gelsin.
Firebird veritabanını kullanacaksanız bence yol yakınken IBX componentlerinden kurtulup FIBPlus yükleyin. IBX, Interbase veritabanı için hazırlanmıştır. Her ne kadar Interbase ve Firebird benzer yapıda gözüksede Firebird 2.0 versiyonunun çıkması ile aradaki farklılıklar çoğalmaktadır. Bu sorunlarla hiç karşılaşmama ihtimalide var tabi ama şimdiden önlem alınmasında fayda var derim.
Kolay gelsin.
Re: Firebird,ibTable ve Performans
Slm bu tavsiyeniz üzerine fibplus indirdim o bileşenleri kullanma kararı aldım aradaki farkları gördüğümde bi sorun olursa tekrar burda yayınlarım teşekkür ediyorum
kolay gelsin
kolay gelsin
UWESIS CORPORATION