AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Was mache ich falsch? Firebird rattert wie irre auf der HDD
Thema durchsuchen
Ansicht
Themen-Optionen

Was mache ich falsch? Firebird rattert wie irre auf der HDD

Ein Thema von Gecko · begonnen am 9. Jun 2007 · letzter Beitrag vom 12. Jun 2007
Antwort Antwort
Seite 1 von 6  1 23     Letzte »    
Gecko
(Gast)

n/a Beiträge
 
#1

Was mache ich falsch? Firebird rattert wie irre auf der HDD

  Alt 9. Jun 2007, 21:24
Datenbank: Firebird • Version: 2.0 • Zugriff über: Zeos
Hallo,

wollte mir einen kleinen Spamfilter schreiben und daher alle Wörter einer SpamMail in die DB packen und dann später noch in einer zweiten Spalte die Häufigkeit dazutragen.
Also Tabellenaufbau:

Spamwort | Häufigkeit

So schön so gut, erster Ansatz:

for I := 0 to SpamwordStringList.Count-1 do begin
qrsecond.SQL.Text:='INSERT INTO POSTEIN (SUBJECT) VALUES (:WORD)';
qrsecond.ParamByName('WORD').AsString:=SpamwordStr ingList.Strings[i];
qrsecond.ExecSQL;
end;

Sobald die Mails etwas grösser werden und sagen wir ein paar tausend wörter anfallen, fängt meine HDD gar fürcherlich für ca. 15-20 Sec an zu rappeln.
Ist das normal für meine Vorgehensweise oder mache ich Querymässig etwas falsch?

So etaws merke ich bei Spamfiltern von Thunderbird und co nicht...was machen die anders?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Was mache ich falsch? Firebird rattert wie irre auf der

  Alt 9. Jun 2007, 21:33
Der Vorteil von Parametern ist eigentlich, daß das Statement nur einmal an das DBMS gesendet werden muß. Diesen Vorteil nutzt du nicht
Delphi-Quellcode:
qrsecond.SQL.Text:='INSERT INTO POSTEIN (SUBJECT) VALUES (:WORD)';
for I := 0 to SpamwordStringList.Count-1 do begin
   qrsecond.ParamByName('WORD').AsString:=SpamwordStringList.Strings[i];
    qrsecond.ExecSQL;
end;
Wie hast du die Transaktionssteuerung eingestellt?
Markus Kinzler
  Mit Zitat antworten Zitat
Gecko
(Gast)

n/a Beiträge
 
#3

Re: Was mache ich falsch? Firebird rattert wie irre auf der

  Alt 9. Jun 2007, 21:41
Zitat von mkinzler:

1. Der Vorteil von Parametern ist eigentlich, daß das Statement nur einmal an das DBMS gesendet werden muß. Diesen Vorteil nutzt du nicht

2. Wie hast du die Transaktionssteuerung eingestellt?
1. Habs mal so umgebaut, das bringt aber so gut wie nichts.

2. Ehrlich gesagt garnicht Wo geht das? Und was sollte ich einstellen?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Was mache ich falsch? Firebird rattert wie irre auf der

  Alt 9. Jun 2007, 21:45
Ich vermute mal du verwendest AutoCommit, d.h. jeder Insert wird in eine eigene Transaktion gepackt und einzeln comitted.
http://www.dsdt.info/tutorials/zeosfirebird/?page=4
Markus Kinzler
  Mit Zitat antworten Zitat
Gecko
(Gast)

n/a Beiträge
 
#5

Re: Was mache ich falsch? Firebird rattert wie irre auf der

  Alt 9. Jun 2007, 22:01
Zitat von mkinzler:
Ich vermute mal du verwendest AutoCommit, d.h. jeder Insert wird in eine eigene Transaktion gepackt und einzeln comitted.
http://www.dsdt.info/tutorials/zeosfirebird/?page=4
Zitat:
Dabei ist der sog. AutoCommit-Modus standardmäßig angeschaltet (True), was auch das Standardverhalten der BDE-Komponenten ist. Bei aktiviertem AutoCommit wird jedes einzelne SQL-Statement nach erfolgreicher Ausführung durch COMMIT bestätigt und die Änderungen in der Datenbank festgeschrieben. Soll dieses Verhalten ausgeschaltet werden und somit eine explizite Transaktion gestartet werden, in der man mehrere Datenbankzugriffe nacheinander durchführt, um diese als "Gruppe" durch COMMIT zu bestätigen, so muss die Methode StartTransaction aufgerufen werden. AutoCommit ist während einer expliziten Transaktion ausgeschaltet. Mit dem Aufruf der Methode Commit werden die Änderungen, die durch die Zugriffe in dieser Transaktion durchgeführt wurden, bestätigt. Der Aufruf der Methode Rollback macht diese Änderungen rückgängig. In beiden Fällen ist AutoCommit nach Methodenaufruf wieder eingeschaltet. Die explizite Transaktion ist beendet.
Wie mache ich das denn jetzt das er alles als eine Transaktion betrachtet?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Was mache ich falsch? Firebird rattert wie irre auf der

  Alt 9. Jun 2007, 22:04
Steht doch in dem Zitat. Vor der Schleife Transaktion starten und danach commiten.
Markus Kinzler
  Mit Zitat antworten Zitat
Gecko
(Gast)

n/a Beiträge
 
#7

Re: Was mache ich falsch? Firebird rattert wie irre auf der

  Alt 9. Jun 2007, 22:13
Hab ich gemacht, bringt aber in Sachen Rappelei 0,0

Delphi-Quellcode:

qrsecond.SQL.Text:='INSERT INTO POSTEIN (SUBJECT) VALUES (:WORD)';
zconnection1.StartTransaction;

for I := 0 to sl.Count-1 do begin
qrsecond.ParamByName('WORD').AsString:=sl.Strings[i];
qrsecond.ExecSQL;
end;

zconnection1.Commit;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Was mache ich falsch? Firebird rattert wie irre auf der

  Alt 9. Jun 2007, 22:16
Wieviele Einträge willst du in einem Rutsch in die Datenbank schreiben?
Vielleicht wäre Insert Into ne Option
Markus Kinzler
  Mit Zitat antworten Zitat
Gecko
(Gast)

n/a Beiträge
 
#9

Re: Was mache ich falsch? Firebird rattert wie irre auf der

  Alt 9. Jun 2007, 22:29
Das waren jetzt ca. 8000 auf einmal. Aber auch bei 1000 rappelt es ja noch lang genug, und das ist ja kaum was...

Was meinst du mit Insert Into? das hab ich doch da?
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#10

Re: Was mache ich falsch? Firebird rattert wie irre auf der

  Alt 10. Jun 2007, 01:04
Jo, ist schon schlimm. Wieso werden immer im Klartext (innerhalb des Programms selbst) irgendwelche SQL-Statements zusammengebaut. Ihr kapiert einfach nicht, was eine Methode ist. In diesem Fall ist das Insert und das würde so aussehen :

Delphi-Quellcode:
Dataset.Insert;
Dataset.Parambyname (...);
Dataset.post;
1000 DS ergibt dann wohl 1-10 Sek.
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 6  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz