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 3 von 4     123 4      
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#21

Re: Datensätze vergleiche

  Alt 2. Aug 2007, 10:44
Hallo Tanja,

Zitat von Dumpfbacke:
... kannst du mir sagen so ich so einen UDF bekommen kann und wie "Breit" dann der Hash-Wert ist. ...
ich habe zwei UDF Libraries gefunden, eine von Safa Rimeh (commercial) und eine von Richard Kotal (free).

Es ist eine hohe Kunst eine Aufgabenstellung so zu beschreiben, dass die Hilfestellung eines Unbeteiligten keinen schalen Beigeschmack hinterlässt. Bei deinem Problem irritiert mich, dass du zwei Textdateien vergleichen sollst (was man mit drei Unix Text Tools schnell erledigt hat) und diese Dateien im CSV-Format zu dir gelangen (was bedeutet, dass sie wohl Export-Dateien sind).

Auch weiß ich nicht, ob du diesen Vergleich regelmäßig oder einmalig durchführen willst und wie du das Ergebnis zurückgeben sollst. Ich gehe also einfach weiter davon aus, dass du lediglich ein performantes UPDATE-Statement für Interbase 6 suchst. Für eine optimale Lösung deines Problems müsste man statistische Informationen über deine Daten haben, wie alzaimar versteckt angedeutet hat.

Aber alles in allem sollten zwei mal 1 Mio Datensätze noch kein richtiges Problem darstellen. Um der Ungewissheit des Laufzeitverhaltens zu entgehen, würde ich zwei samples (1% und 5%) erstellen und mit denen die Zeit nehmen. Danach weißt du wie dein UPDATE-Statement skaliert und kannst die Wartezeit für den full set abschätzen und dein performance tuning anpassen.

SQL-Code:
UPDATE tabelle2
  SET datum = CURRENT_DATE()
  WHERE hash NOT IN (SELECT hash FROM tabelle1)
Freundliche Grüße
  Mit Zitat antworten Zitat
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
329 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#22

Re: Datensätze vergleiche

  Alt 2. Aug 2007, 11:18
Zitat von marabu:
Hallo Tanja,

ich habe zwei UDF Libraries gefunden, eine von Safa Rimeh (commercial) und eine von Richard Kotal (free).

Es ist eine hohe Kunst eine Aufgabenstellung so zu beschreiben, dass die Hilfestellung eines Unbeteiligten keinen schalen Beigeschmack hinterlässt. Bei deinem Problem irritiert mich, dass du zwei Textdateien vergleichen sollst (was man mit drei Unix Text Tools schnell erledigt hat) und diese Dateien im CSV-Format zu dir gelangen (was bedeutet, dass sie wohl Export-Dateien sind).

Auch weiß ich nicht, ob du diesen Vergleich regelmäßig oder einmalig durchführen willst und wie du das Ergebnis zurückgeben sollst. Ich gehe also einfach weiter davon aus, dass du lediglich ein performantes UPDATE-Statement für Interbase 6 suchst. Für eine optimale Lösung deines Problems müsste man statistische Informationen über deine Daten haben, wie alzaimar versteckt angedeutet hat.

Aber alles in allem sollten zwei mal 1 Mio Datensätze noch kein richtiges Problem darstellen. Um der Ungewissheit des Laufzeitverhaltens zu entgehen, würde ich zwei samples (1% und 5%) erstellen und mit denen die Zeit nehmen. Danach weißt du wie dein UPDATE-Statement skaliert und kannst die Wartezeit für den full set abschätzen und dein performance tuning anpassen.

SQL-Code:
UPDATE tabelle2
  SET datum = CURRENT_DATE()
  WHERE hash NOT IN (SELECT hash FROM tabelle1)
Freundliche Grüße
Hallo marabu
Ich habe mir die UDF mal gezogen und werde es mal prüfen. Die Daten würde ich schön öfters bekommen und auswerten. Das Ergebnis sollte dann in der Datenbak weiter verarbeitet werden.

Tanja
Tanja
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#23

Re: Datensätze vergleiche

  Alt 2. Aug 2007, 11:23
Hallo Tanja,

mein SQL-Code sllte ja nur zeigen,
dass Interbase6 sehr wohl das exists kennt.
Die Nutzung von ist angeblich schneller als IN.

Zur Performance.
Warum einen Hash erzeugen, wenn es mit Concat
(wie in meinem Bsp mit dem SumFeld) auch geht.

OK, das mit dem einfachen Zusammenziehen war nicht so gut,
aber ein feld1 || , feld2 || ,

sollte doch reichen ?


Heiko
Heiko
  Mit Zitat antworten Zitat
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
329 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#24

Re: Datensätze vergleiche

  Alt 2. Aug 2007, 12:02
Zitat von hoika:
Hallo Tanja,

mein SQL-Code sllte ja nur zeigen,
dass Interbase6 sehr wohl das exists kennt.
Die Nutzung von ist angeblich schneller als IN.

Zur Performance.
Warum einen Hash erzeugen, wenn es mit Concat
(wie in meinem Bsp mit dem SumFeld) auch geht.

OK, das mit dem einfachen Zusammenziehen war nicht so gut,
aber ein feld1 || , feld2 || ,

sollte doch reichen ?


Heiko
Hallo Heiko,
ja es reicht schon, jedoch habe ich es nach ca. 2 Stunden abgebrochen. Es kann ja noch Tage laufen bzw. in 5 Minuten fertig sein.
Tanja
Tanja
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#25

Re: Datensätze vergleiche

  Alt 2. Aug 2007, 12:28
Hallo Tanjy,

was dauert denn so lange, schon das Erzeugen von SumFeld ?
oder die nachfolgende Query ?


Heiko
Heiko
  Mit Zitat antworten Zitat
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
329 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#26

Re: Datensätze vergleiche

  Alt 2. Aug 2007, 15:51
Zitat von hoika:
Hallo Tanjy,

was dauert denn so lange, schon das Erzeugen von SumFeld ?
oder die nachfolgende Query ?


Heiko
Hallo Heiko,
das Summenfled ist kein Problem. Dauert ca. 3-5 Minuten. Nur dann die Query habe ich nach 2 Stunden mal abgebrochen.

Tanja
Tanja
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#27

Re: Datensätze vergleiche

  Alt 2. Aug 2007, 17:10
Hallo Tanja,

1. zeig noch mal die Query

2. nimm etwa 1000 Einträge pro Tabelle
und teste die Query im IBPlanalyzer



Heiko
Heiko
  Mit Zitat antworten Zitat
Hansa

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

Re: Datensätze vergleiche

  Alt 2. Aug 2007, 19:13
Zitat von Dumpfbacke:
...Es liegen zwei CSV Dateien mit jewals fast 800.000 Datenstzäte vor. Diese beiden Dateien habe ich ich zwei Tabellen im Interbase geschrieben...
Tabelle 2 soll also auf dem neuesten Stand sein, in Abhängigkeit von Tabelle 1 ?

Zitat von Dumpfbacke:
...Nun wollte ich in alle Datensätze in der Tabelle2 das aktuelle Datum schreiben, wenn die Datensatz in der Tabelle1 vorhanden ist. Somit müßte der rest ohne Datum dann neu sein oder geändert worden.
Na, dann muss die Tabelle 2 wohl sequentiell durchlaufen werden (Sortierung spielt keine Rolle, da es sowieso jeden DS in Tabelle 2 betrifft). DS in Tabelle 1 vorhanden => Datum setzen. Habe ich das richtig verstanden ? Falls ja, dan würde ich folgende stored Procedure bauen und über die Tabelle 2 laufen lassen (geht auch ohne EXISTS) :

SQL-Code:
CREATE PROCEDURE NEUTABLESP (
    ID,
    FELD1 VARCHAR (...
...
    FELD6
As
Declare Variable VORHANDEN Integer;
BEGIN
  VORHANDEN = -1;
  SELECT ID FROM TABLE1 WHERE (FELD1= :FELD1) AND
...
     (FELD6= :FELD6) INTO :VORHANDEN;
  IF (VORHANDEN >= 0) THEN BEGIN
    UPDATE TABLE2 SET DATUM=CURRENT_TIMESTAMP
    WHERE (FELD1= :FELD1) AND
...
     (FELD6= :FELD6)
  END
  SUSPEND;
END^
Nicht getestet ! So würde ich zumindest mal anfangen.
Gruß
Hansa
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#29

Re: Datensätze vergleiche

  Alt 2. Aug 2007, 20:49
@hansa, die sortierung spielt soweit eine rolle, dass bei zwei unsortierten datensätzen, die eine datei immer wieder vom beginn an gelesen werden muss, was sich auf die laufzeit niederschlägt. wenn beide sortiert sind, dann braucht jede tabelle exact 1x durchlaufen werden und alle änderungen, inserts, deletes sind ermittelt.

@Dumpfbacke, dann kannste ja auch die sortierfunktion deiner datenbank nutzen, wenn du die flat files nicht sortieren möchtest. da brauchste aber zwei cursor nach folgendem schema...select * from tab1 order by ... und select * from tab2 order by ... wobei die sortieroptionen die selben sidn. und dann einfach wie bei zwei flat files durchschleifen... ein durchlauf über tab1 und die tab2 als slave und wenn du am ende angekommen bist, haste alle infos.

grüsse
gg
  Mit Zitat antworten Zitat
Hansa

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

Re: Datensätze vergleiche

  Alt 2. Aug 2007, 21:04
Wozu soll denn da die Sortierung eine Rolle spielen ? Wozu soll das gut sein ? Nochmals grob mein Vorschlag : sequentiell über Tabelle 2 wandern. Bei jedem Datensatz anhalten und die SP ausführen. Die soll in Tabelle 1 gucken, ob ein gleicher Datensatz existiert oder nicht. Falls ja => aktuellen Datensatz von Tabelle 2 updaten (Datum setzen) -> nächster DS von Tabelle 2. Selbes Spielchen durchführen bis EOF von Tabelle 2. DS, die in beiden Tabellen vorhanden sind haben dann ein Datum und die nicht in Tabelle 1 enthaltenen eben nicht. Und fertig.
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 02:37 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