Autor Beitrag
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Mo 01.08.16 15:51 
Das sind auch 1000 Zugriffe auf die Datenbank. Wobei aber jedes Mal nur die Werte für die Parameter übertragen werden. Nicht mehr das ganze Statement.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)

Für diesen Beitrag haben gedankt: NOS
NOS Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 183
Erhaltene Danke: 2

Win XP, Win Vista Ultimate, Win 7 Ultimate
Delphi 19.4 - Sydney
BeitragVerfasst: Mo 01.08.16 15:57 
Ok ... also so wie ich es jetzt auch habe ...

einmal die vorbereitung

ausblenden Delphi-Quelltext
1:
  conAddParentURLQuery.Sql.Text := 'INSERT INTO ParentURLTable(PID, URL) VALUES (:PID, :URL)';					


und dann das adden in einer schleife

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
   try
    conAddParentURLQuery.ParamByName('PID').AsInteger := FCurrentID;
    conAddParentURLQuery.ParamByName('URL').AsString := AddURL;
    conAddParentURLQuery.ExecSql;
   except
    on E: Exception do
     if DomainCrawler.LOGMode = lmFile then
      DomainCrawler.WriteToLOGFile('CoreEngine Error 100020 (AddItemToDataBase - Insert ParentURLTable) - [' + IntToStr(ThreadID) + '] - ' + E.Message + ' | ' + AddURL + ' | ' + FCurrentURL);
   end;


wie kann man solch zugriffe noch optimieren von der geschwindigkeit her ? gibt es da noch möglichkeiten ?
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Mo 01.08.16 16:23 
Du kannst außerdem noch vor der Schleife eine Transaktion starten, und sie nach der Schleife committen. Das bringt noch ein bisschen.

Wobei man da abwägen muss, ob das sinnvoll ist. Wenn ein Datensatz nicht angenommen wird (warum auch immer), werden in dem Fall natürlich alle Datensätze nicht angenommen.
Und ich würde keine langlaufenden Transaktionen haben wollen, wenn es nicht für die Datenintegrität absolut notwendig ist. Langlaufende Transaktionen können auch wieder Nachteile haben. Du musst abwägen, wie lange die Schleife läuft und ob es Dir der Geschwindigkeitsvorteil wert ist, eventuelle Nachteile in Kauf zu nehmen.

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)

Für diesen Beitrag haben gedankt: NOS
NOS Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 183
Erhaltene Danke: 2

Win XP, Win Vista Ultimate, Win 7 Ultimate
Delphi 19.4 - Sydney
BeitragVerfasst: Mo 01.08.16 16:30 
Es ist so dass ich mehrere Threads laufen habe die mit jeweils einer Connection aus einem Pool eine URL in dem Thread downloaden, analysieren und ich dann im anschluss an die analyse die listen mit den Links, HTags etc. in die DB schreiben will ... ich glaube es macht in dem Falle so keinen Sinn aber ich werde es trotzdem mal austesten.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 01.08.16 17:00 
Zitat:
analysieren und ich dann im anschluss an die analyse die listen mit den Links, HTags etc. in die DB schreiben will ... ich glaube es macht in dem Falle so keinen Sinn aber ich werde es trotzdem mal austesten.


Das Ergebnis einer solchen Analyse klingt doch schon nach genau einer Transaktion. Wer will schon ein Teilergebnis in der Datenbank oder mit anderen Analysen (beim anlegen) verknüpft haben?
Primär sollte das Ding ja auch erstmal das Richtige tun. Das es das auch schnell macht kommt später. Dabei kann man sich dann im Zweifel überlegen ob man Korrektkeit/Vollständigkeit für Performance aufgeben muß.
NOS Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 183
Erhaltene Danke: 2

Win XP, Win Vista Ultimate, Win 7 Ultimate
Delphi 19.4 - Sydney
BeitragVerfasst: Mo 01.08.16 17:17 
Hi Ralf,

das richtige tut es schon :) Funktioniert einwandfrei, sammelt korrekt alle Daten und speichert auch alles entsprechend ab.

Den WebsiteSpider gibt es hier kostenlos -> seoboxx.com/de/produkte/websitespider

Ich baue die Engine grad um und habe einen neuen Parser geschrieben und die DB umgebaut und wollte danach ein wenig "Performance" und "Speed" in die Analyse bringen sofern möglich.

Nächster Schritt ist der Umbau auf FB 3.0 embedded