
Firebird kullanım
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Ottoman yazdı:Arabellekli Düzenlemeler (Cached Updates)Açıklaması bu!.Arabellekli Düzenlemeler (Cached Updates)
Arabellekli düzenlemeler (Cached Updates) konusunun amacı BDE tabanlı veri kümeleri ile arabellekli düzenlemelerin kullanımı hakkında bilgi vermektir. Aynı zamanda ara bellek kullanımı avantaj ve dezavantajları, ana/detay (Master/Detail) yapı ile ara bellek kullanımı ve TUpdateSQL bileşeni hakkında geniş açıklamalarda bulunulmuştur. anlatım örnek uygulamalarla desteklenmiştir. Kitaptan bir paragraf:
"Arabellekli düzenlemelerin temel amacı işlem grubu (Transaction) süresini ve çok kullanıcılı ortamlarda ağ trafiğini azaltmaktır. Buna rağmen gerçek zamanlı uygulamalarda bu özelliğin kullanılması uygun olmayabilir.
Arabellekli düzenlemeler kullanıldığında veriye yapılan değişiklikler lokal olarak ara bellekte tutulmakta ve veri tabanına bu değişiklikler gönderilmemektedir.
Doğru! ama "Procedure FetchAll" Tüm VT'Bileşenlerinde mevcuttur.ve kullanılabilir.(Tabi bilinçli olarak!)Procedurleri Tablonuzun "OnCreate" olayında ayrı ayrı deneyiniz! (Tabloyu açıp kapayınız)Mesela ben 100.000 kayıtlık VT'de denedim,(test'e tuttum),aralarında hiç bir fark göremedim.(Hocamın dediği gibi Kursor ikisinde ilk kayıttaydı)Kod: Tümünü seç
IBDataSet1.FetchAll;//Açılma süresi 4 saniye. ...................................... IBDataSet1.Open;Açılma süresi 4 saniye.
10-12 tabloluk bir vt var.Bir tablosuna ise test amaçlı veriler girdim.
Blob Alan yok.En fazla yer tutan alanım Varchar(500) ve bunlardan 5-6 tane var.
Toplam alan sayısı25.Bunların 3-4 tanesi integer,2-3 tanesi Date, 2-3 tanesi double.1 tane primary key, bir tane index var.
Tabloya 300.000 kayıt girdim.
PC özellikleri P4 2,8 İşlemci 1 GB ram Firebird Server 1.5 SuperServer var.Ayarları Default.Lokalde denedim.Yani FirebirdServer ile Database ve istemci exe aynı pcde.25 alanın hepsini çekiyorum.
Kod: Tümünü seç
IBdataset1.open;//3 saniye de
Kod: Tümünü seç
IBDataset1.FetchAll;//1 dakika
Hatan falan yok. Olay aynen öyle zaten. Bu konu forumda defalarca gündeme geldi. Birkaç mesaj önce de ben belirttim. Helpine bakınca zaten FetchAll'la ilgili yeterli açıklama var. Yaptığı işlem belli. Nerelerde kullanılacağı belli.NewMember yazdı:Bu durumda bir yerde hata yapıyoruz.Ama nerde?
Sonuçta hata yok. Senin testin doğrusu. Hele çok kullanıcılı sistemlerde çok daha trajik sonuçlar alınacaktır. Adamlar helpine yazmış FetchAll Cached Updates uygulamalarında kullanılır diye. Hayır ben illa her yerde kullanıcam dersen 3 saniye yerine beklersin 1 dakika. Hatta bu network ortamında olur 5 dakika. Artık kullanıcı formu aç dedikten sonra gider çayını alır içer varsa bir iki telefon görüşmesi yapar sonra gelir form açılmış.
Hele daha trajik durumlarda artık gider öğlen yemeğini yer gelir form açılmış.
Hatta daha trajik durumlarda mesai bitiminde basar tuşa ertesi gün geldiğinde form açılmış.
Hatta...
Neyse fazla uzatmayalım.
İyi çalışmalar.
Aslında dediklerine katılıyorum ve zaten bir kaç mesaj önce benzer şeyler yazdım.BuradaHakan Can yazdı:Hatan falan yok. Olay aynen öyle zaten. Bu konu forumda defalarca gündeme geldi. Birkaç mesaj önce de ben belirttim. Helpine bakınca zaten FetchAll'la ilgili yeterli açıklama var. Yaptığı işlem belli. Nerelerde kullanılacağı belli.NewMember yazdı:Bu durumda bir yerde hata yapıyoruz.Ama nerde?
Sonuçta hata yok. Senin testin doğrusu. Hele çok kullanıcılı sistemlerde çok daha trajik sonuçlar alınacaktır. Adamlar helpine yazmış FetchAll Cached Updates uygulamalarında kullanılır diye. Hayır ben illa her yerde kullanıcam dersen 3 saniye yerine beklersin 1 dakika. Hatta bu network ortamında olur 5 dakika. Artık kullanıcı formu aç dedikten sonra gider çayını alır içer varsa bir iki telefon görüşmesi yapar sonra gelir form açılmış.
Hele daha trajik durumlarda artık gider öğlen yemeğini yer gelir form açılmış.
Hatta daha trajik durumlarda mesai bitiminde basar tuşa ertesi gün geldiğinde form açılmış.
Hatta...
Neyse fazla uzatmayalım.
İyi çalışmalar.
sorusunda biraz ironi vardır.Bir hata yapıyoruz ama nerde
Çünkü @Ottoman kardeşimiz bu iki çağrının aynı saniyede (4 Sn) iş yaptığını yazmış.Elimde bu tür işlemler için hazırladığım bir db vardı ve test edip sonuçlarını yazdım.
Kolay gelsin.
- kadirkurtoglu
- Üye
- Mesajlar: 748
- Kayıt: 22 May 2005 01:20
- Konum: Uzakta Görünen Tepeden...
Kod: Tümünü seç
procedure TFIBCustomDataSet.FetchAll;
var
CurBookmark:String;
iCurScreenState:Integer;
begin
ChangeScreenCursor(iCurScreenState);
try
if FQSelect.Eof or not FQSelect.Open then
Exit;
DisableControls;
DisableScrollEvents;
try
CurBookmark:= Bookmark;
Last;
Bookmark:= CurBookmark;
finally
EnableControls;
EnableScrollEvents;
end;
finally
RestoreScreenCursor(iCurScreenState);
end;
end;
Ben sizin nasıl bir VT, tablo yapısı hazırladığınızı bilemiyorum, (daha öncede dediğim gibi bilinçli kullanılırsa)fakat Bir firmada 10 (7=XP,3=Win,2000)terminalli sistemlerde şu an kullanılıyor. ve Genelde Network Ağında)her proğramımda kullanıyorum.benim proğramlarımda hiç bir problem yaşamadım.tıkır tıkır çalışıyor.....Herkesin görüşü.farklıdır...Sizde kullanmayınız!.Zannedersem Bilgi eksikliği var,iyi araştırmak lazım.(Sizin için.).
(Bir çok proğramlarımda var ama ,10 terminalli,proğramda
şu şekilde kullanıyorum;
Tablolar Aşağıdaki gibi açılıyor:
Her Terminalde, DBGrid'de 12 satırlık liste.......
Her Terminal Toplam 120 Bileşen ve Araçlarla çalışıyor.Bu araçların (Sütunların)Toplam % 90'ı verilerle doluyor,Sütunlar 50 karakteri geçmiyor.
Herkese iyi çalışmalar.
(Bir çok proğramlarımda var ama ,10 terminalli,proğramda
şu şekilde kullanıyorum;
Tablolar Aşağıdaki gibi açılıyor:
Kod: Tümünü seç
IBDataSet1.FetchAll;//VT FetchAll'la açılıyor
IBDataSet1.Last;//Liste son Kayıtta açılıyor.
//StatusBarla iligili komutlar
//DBComboBox'larla ilgili komutlar.
vs...............
.................
end;
Her Terminal Toplam 120 Bileşen ve Araçlarla çalışıyor.Bu araçların (Sütunların)Toplam % 90'ı verilerle doluyor,Sütunlar 50 karakteri geçmiyor.
Herkese iyi çalışmalar.
Tablo Yapısı:
Yukarıda DDL i verilen tabloda 300.000 kayıt var.Diğer 12 tablo da ise kayıt yok bazılarında bir iki kayıt.Tabloların bir kaçında zatenparametrik bilgiler tutuluyor ve 2-3 kayıt var.Vs.........
Sistem ile ilgili bir sıkıntı olup olmadığı akla gelebilir.Tesadüf bilgisayar yeni formatlanmıştı.Yani sistemi kasacak bir olay yok.
Test, tamamlanmış bir exe ile yapılmadı.Yani arka planda bazı kodlar kastırıyormu, ya da exen belleği fazla işgal ediyormu sorusu akla gelmesin diye yazıyorum.(Yani free edilmeyen değişkenler ve devexpress component gibi kastıran şeyler yok.) Sıfırdan oluşturulan tek forma sahip bir exede yapıldı test.Ekranda sadece bir db grid ve dbgrid(Standart) 6 satırdan ibaret.
Bu arada yanlış anlaşılma olmasın.Amacımız doğru yöntemi bulmak.Ben her ne kadar FetchAll yapmak istemesemde ve de yapmasamda kullanıcı dbgridin scrollbarına bir yapıştımı al sana FetchAll oluyor.Biz doğru yöntemi öğrenmek zorundayız.Yada dbgrdi scrollbarı mı gizeriz ne yaparız artık
Herkese kolay gelsin.
Kod: Tümünü seç
/******************************************************************************/
/*** Generated by IBExpert 30.11.2006 10:02:04 ***/
/******************************************************************************/
SET SQL DIALECT 3;
SET NAMES WIN1254;
/******************************************************************************/
/*** Tables ***/
/******************************************************************************/
CREATE TABLE HASTALAR (
KAYITID IDNO /* IDNO = NUMERIC(18,0) NOT NULL */,
TCKIMLIKNO NUMERIC(18,0),
ADISOYADI DMNAD /* DMNAD = VARCHAR(50) */,
BABAADI VARCHAR(20),
DOGUMTARIHI DATE,
CINSIYET VARCHAR(5),
EVTEL TEL /* TEL = VARCHAR(18) */,
CEPTEL TEL /* TEL = VARCHAR(18) */,
ISTEL TEL /* TEL = VARCHAR(18) */,
KURUMU VARCHAR(25),
ADRES ADRES /* ADRES = VARCHAR(250) */,
KAYITTARIHI DATE,
KANGRUBU VARCHAR(8),
SIGARA VARCHAR(5),
OBEZITE VARCHAR(5),
ALKOL VARCHAR(5),
GECIRILMISHASTALIK VARCHAR(500),
GECIRILMISAMELIYAT VARCHAR(500),
KULLANDIGILACLAR VARCHAR(500),
DUSUNCELER VARCHAR(2500),
RESIMYOL VARCHAR(500),
MESLEK VARCHAR(15),
BOY VARCHAR(5),
KILO VARCHAR(5),
BARKODNO VARCHAR(25)
);
/******************************************************************************/
/*** Primary Keys ***/
/******************************************************************************/
ALTER TABLE HASTALAR ADD CONSTRAINT PK_HASTALAR PRIMARY KEY (KAYITID);
/******************************************************************************/
/*** Indices ***/
/******************************************************************************/
CREATE INDEX INDXHASTAADSOYAD ON HASTALAR (ADISOYADI);
CREATE INDEX INDXTCKIMLIK ON HASTALAR (TCKIMLIKNO);
/******************************************************************************/
/*** Triggers ***/
/******************************************************************************/
SET TERM ^ ;
/******************************************************************************/
/*** Triggers for tables ***/
/******************************************************************************/
/* Trigger: HASTALARCHNG */
CREATE TRIGGER HASTALARCHNG FOR HASTALAR
ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 0
AS
begin
post_event 'HASTALARDEGISTI';
end
^
SET TERM ; ^
/******************************************************************************/
/*** Privileges ***/
/******************************************************************************/
Sistem ile ilgili bir sıkıntı olup olmadığı akla gelebilir.Tesadüf bilgisayar yeni formatlanmıştı.Yani sistemi kasacak bir olay yok.
Test, tamamlanmış bir exe ile yapılmadı.Yani arka planda bazı kodlar kastırıyormu, ya da exen belleği fazla işgal ediyormu sorusu akla gelmesin diye yazıyorum.(Yani free edilmeyen değişkenler ve devexpress component gibi kastıran şeyler yok.) Sıfırdan oluşturulan tek forma sahip bir exede yapıldı test.Ekranda sadece bir db grid ve dbgrid(Standart) 6 satırdan ibaret.
Bu arada yanlış anlaşılma olmasın.Amacımız doğru yöntemi bulmak.Ben her ne kadar FetchAll yapmak istemesemde ve de yapmasamda kullanıcı dbgridin scrollbarına bir yapıştımı al sana FetchAll oluyor.Biz doğru yöntemi öğrenmek zorundayız.Yada dbgrdi scrollbarı mı gizeriz ne yaparız artık



Herkese kolay gelsin.