AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Datensätze vergleiche
Thema durchsuchen
Ansicht
Themen-Optionen

Datensätze vergleiche

Ein Thema von Dumpfbacke · begonnen am 1. Aug 2007 · letzter Beitrag vom 3. Aug 2007
Antwort Antwort
Seite 4 von 4   « Erste     234   
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#31

Re: Datensätze vergleiche

  Alt 2. Aug 2007, 22:42
Prinzipiell hat Hansa recht. Nur ist IB/FB keine DBISAM-DB, sondern ein RDBMS. Hier wird mit Mengen gearbeitet. Die verhalten sich ohne Index intern genauso wie eine DBISAM, aber bei richtigen Indexen wird es verdammt schnell. Dann greifen eben B-Tree-Algorithmen, die pro Datensatz gegen O(1) gehen, also nahezu unabhängig von der Anzahl der Datensätze ist. Bei 800.000 macht das schon den Unterschied zwischen Stunden und Sekunden aus. Ich traue mir zu, bei 1-2 Mio Datensätzen ein Self-Join in ein paar Sekunden hinzubekommen.

Aber mir is det sowieso allet ejal weil ick morjen in Uuuurlaub fliegen tu!
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#32

Re: Datensätze vergleiche

  Alt 3. Aug 2007, 00:25
@hansa: tja, weil man dann nicht mehr sortieren braucht. so 'n ascii file, sortiert das BS mit 'n paar parametern problemlos... und dann läuft der vergleich, auch ohne DB in 'n paar sekunden durch.

@alzaimar: mit den ständigen zugriff auf die DB, kann es schon länger brauchen. aber bei zwei sortierten sequentziellen dateien (master --> slave) ist die laufzeit O(n). er liest exakt 2x 800'000 datensätze und die sache ist erledigt. da brauchts auch keinen index oder so was ...nur sortiert müssen die beiden tabellen sein.

einen solchen fall, hatte ich schon lange nicht mehr. aber damals mit COBOL lieb das ganze in 'n paar sekunden (auf 'ner alten architektur [286 war es glaub ich]) durch. ansonsten einfach mal nach den stichwörtern "normierte programmierung", "gruppenwechsel" oder "sequentielle dateiverarbeitung" suchen. da stehen die standardprobleme (vor der datenbankzeit) mit sicherheit ausführlich beschrieben...

grüsse und noch 'n schönen abend
gg
  Mit Zitat antworten Zitat
Hansa

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

Re: Datensätze vergleiche

  Alt 3. Aug 2007, 13:04
Mehr ist das nicht :

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, FIBDataSet, pFIBDataSet, FIBDatabase, pFIBDatabase,
  FIBQuery, pFIBQuery, pFIBStoredProc;

type
  TForm1 = class(TForm)
    Database: TpFIBDatabase;
    Transaction: TpFIBTransaction;
    Test1DS: TpFIBDataSet;
    Test2DS: TpFIBDataSet;
    Button1: TButton;
    Memo1: TMemo;
    TestSP: TpFIBStoredProc;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
  i := 0;
  Test1DS.close;
  Test1DS.SelectSQL.Text := 'SELECT * FROM TEST1';
  Test1DS.Open;
  while not Test1DS.Eof do begin
    i := i + 1;
    TestSP.ParamByName('Feld1').AsString := Test1DS.FieldByName ('Feld1').AsString;
    TestSP.ParamByName('Feld2').AsString := Test1DS.FieldByName ('Feld2').AsString;
    TestSP.ParamByName('Fled3').AsString := Test1DS.FieldByName ('Fled3').AsString;
    TestSP.ParamByName('Feld4').AsString := Test1DS.FieldByName ('Feld4').AsString;
    TestSP.ParamByName('Feld5').AsString := Test1DS.FieldByName ('Feld5').AsString;
    TestSP.ParamByName('Fled6').AsString := Test1DS.FieldByName ('Fled6').AsString;
    TestSP.ExecProc;
    Memo1.Lines.Add(IntToStr (i));
    Test1DS.Next;
  end;
  Transaction.Commit;
  Database.Close;
  showmessage ('fertig !');
  Close;
end;

end.
Inkl. übernommene Schreibfehler. Im Anhang sind 2 DBs. Da drin ist auch die SP. TESTDB2.FDB ist der Ursprungszustand TESTDB.FDB der Zustand der DB nach Programmlauf. Und Grenzgänger : sortiert ist da nichts.
Angehängte Dateien
Dateityp: txt testdb2_430.txt (4,9 KB, 16x aufgerufen)
Dateityp: txt testdb_208.txt (4,9 KB, 10x aufgerufen)
Gruß
Hansa
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#34

Re: Datensätze vergleiche

  Alt 3. Aug 2007, 18:24
klar hansa, es geht auch ohne sortieren. da erschlägt man dann das problem mit mehr rechenleistung . aber das hat man ja heutzutage

die lösung mit den zwei sortierten flat files, kommt mit vielleicht 50kb hauptspeicher aus und braucht keine datenbank sondern nur zwei open und readln...

das ging etwa so...
Delphi-Quellcode:
open master; open slave;
master.first; slave.first;
while not master.eof do
begin
 if master.record > slave.record then
 begin
  writeln('gelöschter slave record: ', slave.record);
  slave.next;
 end
 else
  if master.record = slave.record then
  begin
   writeln('master record = slave record');
   slave.next;
  end
  else
  begin //master.record < slave.record
   writeln('neuer slave record', slave.record);
  end;
 master.next;
end;
while not slave.eof do //noch datensätze in slave übrig?
begin
 writeln('neuer slave record: ', slave.record);
 slave.next;
end;

close master; close slave;
das hier wär da auch schon der ganze code . also so komplex ist das mit den zwei sortierten flat fies gar nicht und da sortiert auch sehr schnell

grüsse und noch 'n schönes weekend
gg
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


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 22:31 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