Firebird : Yürüyen Bakiye Uygulaması
#1
access-sql-14 
Herkese merhaba,

Zaman zaman soru gelir... yürüyen, koşan, zıplayan bakiye vs.
Standart "SELECT" sql ile tam bir işkence haline gelebilen bu istek SQL Server sistemlerde kolay ve "ÇOK" hızlıdır.

Sevgili Berkant konuyla ilgili performans sonuçlarını bizlerle paylaşmıştı. Ben de Firebird ile yaptığım test sonuçlarını sizlerle paylaşmak istedim.

Koşullar:
Local sistem; Firebird Server versiyon:2.1.3; Celeron 2.8; 2 GB DDR; Toplam 50.000 ondalıklı kayıt.

Süreler, VB6 ile Datagrid nesnesinde görüntülendikten sonra alındı.

Database Yapısı (SQL Script):
SQL
  1. /* ZEKİ GÜRSOY © 2009 */
  2. /* Script bittiğinde connection da otomatik
  3.   kapanacaktır. */
  4.  
  5. -- Yeni database..
  6. CREATE DATABASE 'C:\zeki.fdb'
  7. USER 'SYSDBA'
  8. PASSWORD 'masterkey'
  9. PAGE_SIZE = 2048
  10. DEFAULT CHARACTER SET WIN1254;
  11.  
  12. -- Tablo yapmak için bağlantı kur..
  13. CONNECT 'C:\zeki.fdb'
  14. USER 'SYSDBA'
  15. PASSWORD 'masterkey';
  16.  
  17. -- Tablo..
  18. CREATE TABLE SATISLAR (
  19. SATID INTEGER,
  20. SATIS NUMERIC(18, 2));
  21.  
  22. -- ID alanı indexlenir..
  23. CREATE INDEX INDEXIM ON SATISLAR(SATID);
  24.  
  25. /* Procedure' ler..
  26.   Firebird' de iki farklı cursor kullanımı vardır:
  27.   1- For-Each yapısı,
  28.   2- Fetch (Explicit) cursor */
  29. SET TERM ^;
  30.  
  31. -- For-Each yapı..
  32. CREATE PROCEDURE BAKIYELER
  33. RETURNS(
  34. SATID INTEGER,
  35. SATIS NUMERIC(18, 2),
  36. BAKIYE NUMERIC(18, 2))
  37. AS
  38. DECLARE VARIABLE DYN_BAKIYE NUMERIC(18, 2);
  39. BEGIN
  40. DYN_BAKIYE = 0.00;
  41. FOR
  42. SELECT SATID, SATIS FROM SATISLAR
  43. INTO :SATID, :SATIS DO
  44. BEGIN
  45. DYN_BAKIYE = DYN_BAKIYE + SATIS;
  46. BAKIYE = DYN_BAKIYE;
  47. SUSPEND;
  48. END
  49.  
  50. END^
  51.  
  52. -- Fetch yapı..
  53. CREATE PROCEDURE BAKIYELER2
  54. RETURNS(
  55. SATID INTEGER,
  56. SATIS NUMERIC(18, 2),
  57. BAKIYE NUMERIC(18, 2))
  58. AS
  59. DECLARE VARIABLE DYN_BAKIYE NUMERIC(18, 2);
  60. DECLARE C CURSOR FOR
  61. (SELECT SATID, SATIS FROM SATISLAR);
  62. BEGIN
  63. DYN_BAKIYE = 0.00;
  64. OPEN C;
  65. WHILE (1 = 1) DO
  66. BEGIN
  67. FETCH C INTO :SATID, :SATIS;
  68. IF (ROW_COUNT = 0) THEN LEAVE;
  69. DYN_BAKIYE = DYN_BAKIYE + SATIS;
  70. BAKIYE = DYN_BAKIYE;
  71. SUSPEND;
  72. END
  73. CLOSE C;
  74. END^
  75.  
  76. SET TERM ; ^



Kayıt dolduran yapı..

SQL
  1. -- 50.000 adet 10 ile 100 arası rasgele ondalık sayılar..
  2. EXECUTE BLOCK
  3. AS
  4. DECLARE I INT = 1;
  5. BEGIN
  6. WHILE (I <= 50000) DO
  7. BEGIN
  8. INSERT INTO SATISLAR VALUES (:I, ROUND((90 * RAND()) + 10, 2));
  9. I = I + 1;
  10. END
  11. END;



Bilindiği gibi Stored Procedure' ler sunucu(server) işlenir. Cursor' lar ayrıca Firebird' de standart sql cümlelerinde de kullanılabiliyor "EXECUTE BLOCK" deyimi ile.

For-Each yapı..

SQL
  1. EXECUTE BLOCK
  2. RETURNS(SATID INTEGER,
  3. SATIS NUMERIC(18, 2),
  4. BAKIYE NUMERIC(18, 2))
  5. AS
  6. DECLARE VARIABLE DYN_BAKIYE NUMERIC(18, 2);
  7. BEGIN
  8. DYN_BAKIYE = 0.00;
  9. FOR
  10. SELECT SATID, SATIS FROM SATISLAR
  11. INTO :SATID, :SATIS DO
  12. BEGIN
  13. DYN_BAKIYE = DYN_BAKIYE + SATIS;
  14. BAKIYE = DYN_BAKIYE;
  15. SUSPEND;
  16. END
  17. END;



Fetch yapı..
SQL
  1. EXECUTE BLOCK
  2. RETURNS(SATID INTEGER,
  3. SATIS NUMERIC(18, 2),
  4. BAKIYE NUMERIC(18, 2))
  5. AS
  6. DECLARE VARIABLE DYN_BAKIYE NUMERIC(18, 2);
  7. DECLARE C CURSOR FOR
  8. (SELECT SATID, SATIS
  9. FROM SATISLAR);
  10. BEGIN
  11. DYN_BAKIYE = 0.00;
  12. OPEN C;
  13. WHILE (1 = 1) DO
  14. BEGIN
  15. FETCH C INTO :SATID, :SATIS;
  16. IF (ROW_COUNT = 0) THEN LEAVE;
  17. DYN_BAKIYE = DYN_BAKIYE + SATIS;
  18. BAKIYE = DYN_BAKIYE;
  19. SUSPEND;
  20. END
  21. CLOSE C;
  22. END;




Sonuçlar:

- Execute Block For-Each : 1,22 sn
- Execute Block Fetch Cursor : 1,26 sn
- Stored Procedure For-Each : 1,56 sn
- Stored Procedure Fetch Cursor : 1,67 sn

[Resim: speedtest2q.jpg]

[Resim: speedtestv.jpg]


.



  Alıntı
Bu mesajı beğenenler:
#2
Test projesine ait Visual Basic kodları..
Form üzerine,
- Datagrid (Datagrid1)
- Buton (Command1)
ekleyin.

vb is not a supported langage
List of available langages :
php, smarty, cuesheet, div, q, mapbasic, gambas, cfdg, netrexx, css, freeswitch, z80, java5, sparql, falcon, asymptote, dot, mxml, plsql, fsharp, dcpu16, vala, basic4gl, qbasic, clojure, oobas, powershell, rails, diff, pli, freebasic, sas, stonescript, scheme, latex, f1, pascal, 6502kickass, bnf, llvm, klonecpp, povray, applescript, python, coffeescript, progress, html4strict, postgresql, lua, newlisp, lisp, unicon, cadlisp, asm, vba, oxygene, modula2, urbi, go, gnuplot, m68k, vbnet, euphoria, spark, xorg_conf, properties, lolcode, oberon2, xbasic, avisynth, yaml, vhdl, cpp, logtalk, powerbuilder, gml, perl, icon, sdlbasic, fo, ocaml-brief, mmix, providex, pic16, klonec, abap, gwbasic, nagios, pike, genero, purebasic, zxbasic, haxe, lotusformulas, awk, visualfoxpro, cobol, pcre, ocaml, apt_sources, chaiscript, autoconf, j, intercal, 68000devpac, xml, asp, lotusscript, bascomavr, genie, tcl, prolog, upc, rebol, octave, nsis, groovy, cil, mirc, smalltalk, oracle11, pycon, mpasm, dos, rsplus, c, locobasic, ini, bash, d, javascript, vedit, magiksf, thinbasic, lb, parasail, proftpd, whitespace, oz, whois, teraterm, 4cs, actionscript, csharp, apache, make, objc, boo, fortran, delphi, oorexx, idl, ecmascript, visualprolog, algol68, verilog, html5, caddcl, haskell, uscript, blitzbasic, rpmspec, java, rexx, scilab, bibtex, ldif, inno, c_loadrunner, hq9plus, perl6, erlang, gdb, kixtart, vim, oracle8, reg, dcs, typoscript, per, hicest, objeck, eiffel, mysql, actionscript3, parigp, pys60, 6502acme, lscript, epc, gettext, scala, tsql, lsl2, matlab, autoit, pf, xpp, robots, ruby, cmake, ada, systemverilog, winbatch, c_mac, jquery, text, e, io, php-brief, pixelbender, modula3, glsl, autohotkey, email, cfm, bf, sql, 6502tasm, arm, dcl, cpp-qt



  Alıntı
Bu mesajı beğenenler:
#3
Hız 50.000 kayıt için müthiş..

Ms. Sql Server'ı bu konuda kıskandıracak seviyede.. Ateş kuşu, hakkettiği değeri en azından gönlümüzde alıyor.. Smile Teşekkürler Zeki..



  Alıntı
Bu mesajı beğenenler:
#4
Teşekkürler... Wink



  Alıntı
Bu mesajı beğenenler:
#5
Zeki, harika bir test yapmışsın kutlarım.. Sonucunun mükemmel hızda olması da beni çok düşündürdü... SS den vaz mı geçsek Wink

Exe yi görmeyi çok isterdim ya da aynı kodlarla ben de yapabilirdim ama FB kurulu değil Nah

ZekiFB is not a supported langage
List of available langages :
php, smarty, cuesheet, div, q, mapbasic, gambas, cfdg, netrexx, css, freeswitch, z80, java5, sparql, falcon, asymptote, dot, mxml, plsql, fsharp, dcpu16, vala, basic4gl, qbasic, clojure, oobas, powershell, rails, diff, pli, freebasic, sas, stonescript, scheme, latex, f1, pascal, 6502kickass, bnf, llvm, klonecpp, povray, applescript, python, coffeescript, progress, html4strict, postgresql, lua, newlisp, lisp, unicon, cadlisp, asm, vba, oxygene, modula2, urbi, go, gnuplot, m68k, vbnet, euphoria, spark, xorg_conf, properties, lolcode, oberon2, xbasic, avisynth, yaml, vhdl, cpp, logtalk, powerbuilder, gml, perl, icon, sdlbasic, fo, ocaml-brief, mmix, providex, pic16, klonec, abap, gwbasic, nagios, pike, genero, purebasic, zxbasic, haxe, lotusformulas, awk, visualfoxpro, cobol, pcre, ocaml, apt_sources, chaiscript, autoconf, j, intercal, 68000devpac, xml, asp, lotusscript, bascomavr, genie, tcl, prolog, upc, rebol, octave, nsis, groovy, cil, mirc, smalltalk, oracle11, pycon, mpasm, dos, rsplus, c, locobasic, ini, bash, d, javascript, vedit, magiksf, thinbasic, lb, parasail, proftpd, whitespace, oz, whois, teraterm, 4cs, actionscript, csharp, apache, make, objc, boo, fortran, delphi, oorexx, idl, ecmascript, visualprolog, algol68, verilog, html5, caddcl, haskell, uscript, blitzbasic, rpmspec, java, rexx, scilab, bibtex, ldif, inno, c_loadrunner, hq9plus, perl6, erlang, gdb, kixtart, vim, oracle8, reg, dcs, typoscript, per, hicest, objeck, eiffel, mysql, actionscript3, parigp, pys60, 6502acme, lscript, epc, gettext, scala, tsql, lsl2, matlab, autoit, pf, xpp, robots, ruby, cmake, ada, systemverilog, winbatch, c_mac, jquery, text, e, io, php-brief, pixelbender, modula3, glsl, autohotkey, email, cfm, bf, sql, 6502tasm, arm, dcl, cpp-qt

kullanarak da sonucu verirsen çok sevineceğim Wink Merak ettim..

Yani tamamı şöyle;

vb is not a supported langage
List of available langages :
php, smarty, cuesheet, div, q, mapbasic, gambas, cfdg, netrexx, css, freeswitch, z80, java5, sparql, falcon, asymptote, dot, mxml, plsql, fsharp, dcpu16, vala, basic4gl, qbasic, clojure, oobas, powershell, rails, diff, pli, freebasic, sas, stonescript, scheme, latex, f1, pascal, 6502kickass, bnf, llvm, klonecpp, povray, applescript, python, coffeescript, progress, html4strict, postgresql, lua, newlisp, lisp, unicon, cadlisp, asm, vba, oxygene, modula2, urbi, go, gnuplot, m68k, vbnet, euphoria, spark, xorg_conf, properties, lolcode, oberon2, xbasic, avisynth, yaml, vhdl, cpp, logtalk, powerbuilder, gml, perl, icon, sdlbasic, fo, ocaml-brief, mmix, providex, pic16, klonec, abap, gwbasic, nagios, pike, genero, purebasic, zxbasic, haxe, lotusformulas, awk, visualfoxpro, cobol, pcre, ocaml, apt_sources, chaiscript, autoconf, j, intercal, 68000devpac, xml, asp, lotusscript, bascomavr, genie, tcl, prolog, upc, rebol, octave, nsis, groovy, cil, mirc, smalltalk, oracle11, pycon, mpasm, dos, rsplus, c, locobasic, ini, bash, d, javascript, vedit, magiksf, thinbasic, lb, parasail, proftpd, whitespace, oz, whois, teraterm, 4cs, actionscript, csharp, apache, make, objc, boo, fortran, delphi, oorexx, idl, ecmascript, visualprolog, algol68, verilog, html5, caddcl, haskell, uscript, blitzbasic, rpmspec, java, rexx, scilab, bibtex, ldif, inno, c_loadrunner, hq9plus, perl6, erlang, gdb, kixtart, vim, oracle8, reg, dcs, typoscript, per, hicest, objeck, eiffel, mysql, actionscript3, parigp, pys60, 6502acme, lscript, epc, gettext, scala, tsql, lsl2, matlab, autoit, pf, xpp, robots, ruby, cmake, ada, systemverilog, winbatch, c_mac, jquery, text, e, io, php-brief, pixelbender, modula3, glsl, autohotkey, email, cfm, bf, sql, 6502tasm, arm, dcl, cpp-qt
Javascript
  1. this.setState({sign:"Here comes the sun...."})







  Alıntı
Bu mesajı beğenenler:
#6
İyi yakalamışsın; "CursorLocation" ayarı 0,5 - 0,6 sn. kadar daha işlemi uzattı. Wink

İşin başka yanı, ilk test yaptığım zamandaki süreleri de tekrar yakalamıyorum. BLOCK yapı 1,27 den 1,67 ye, SP ise 1,56 dan 2,14 e çıktı.



  Alıntı
Bu mesajı beğenenler:


Benzer Konular...
Konu: Yazar Cevaplar: Gösterim: Son Mesaj
  Firebird Store procedure le Bul ve Değiştir AhmetNuri 2 3.233 26-06-2022, 00:20
Son Mesaj: Zeki Gürsoy
  Firebird : Kurulum ve Connection Zeki Gürsoy 9 15.842 21-04-2021, 15:13
Son Mesaj: sarsak
  Firebird Aynı Kayıtları bul ve sil AhmetNuri 0 3.125 12-10-2012, 20:52
Son Mesaj: AhmetNuri
  firebird ile listelenmiş verinin kaynak tablosunu değiştirme yardım! muratxx5 1 2.623 21-05-2012, 00:05
Son Mesaj: Zeki Gürsoy
  Firebird otmatik loglama (Trigger Level Loging) AhmetNuri 6 8.473 26-03-2012, 01:31
Son Mesaj: Zeki Gürsoy
  Firebird Veritabanında olan procedure lar nasıl gizlenir softdestek 8 6.568 19-03-2012, 21:40
Son Mesaj: softdestek
  Firebird : DateDiff (Excel ETARİHLİ fonk. birebir kopyası) Zeki Gürsoy 0 4.185 21-02-2012, 02:58
Son Mesaj: Zeki Gürsoy
  Trigger dan Firebird veri tabanı kullanıcısı ekleme silme ve gücelleme AhmetNuri 7 8.749 12-01-2012, 22:25
Son Mesaj: Zeki Gürsoy

Foruma Git:


Bu konuyu görüntüleyen kullanıcı(lar): 1 Ziyaretçi