![]() |
Datenbank: Firebird • Version: 2.0 • Zugriff über: Zeos
Was mache ich falsch? Firebird rattert wie irre auf der HDD
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? |
Re: Was mache ich falsch? Firebird rattert wie irre auf der
Der Vorteil von Parametern ist eigentlich, daß das Statement nur einmal an das DBMS gesendet werden muß. Diesen Vorteil nutzt du nicht
Delphi-Quellcode:
Wie hast du die Transaktionssteuerung eingestellt?
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; |
Re: Was mache ich falsch? Firebird rattert wie irre auf der
Zitat:
2. Ehrlich gesagt garnicht ;) Wo geht das? Und was sollte ich einstellen? |
Re: Was mache ich falsch? Firebird rattert wie irre auf der
Ich vermute mal du verwendest AutoCommit, d.h. jeder Insert wird in eine eigene Transaktion gepackt und einzeln comitted.
![]() |
Re: Was mache ich falsch? Firebird rattert wie irre auf der
Zitat:
Zitat:
|
Re: Was mache ich falsch? Firebird rattert wie irre auf der
Steht doch in dem Zitat. Vor der Schleife Transaktion starten und danach commiten.
|
Re: Was mache ich falsch? Firebird rattert wie irre auf der
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; |
Re: Was mache ich falsch? Firebird rattert wie irre auf der
Wieviele Einträge willst du in einem Rutsch in die Datenbank schreiben?
Vielleicht wäre Insert Into ne Option |
Re: Was mache ich falsch? Firebird rattert wie irre auf der
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? |
Re: Was mache ich falsch? Firebird rattert wie irre auf der
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. :mrgreen: In diesem Fall ist das Insert und das würde so aussehen :
Delphi-Quellcode:
1000 DS ergibt dann wohl 1-10 Sek.
Dataset.Insert;
Dataset.Parambyname (...); Dataset.post; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz