AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

XML Datenbank Abgleichen Web/Local

Offene Frage von "user.x3m"
Ein Thema von user.x3m · begonnen am 23. Dez 2007 · letzter Beitrag vom 23. Dez 2007
Antwort Antwort
user.x3m

Registriert seit: 23. Apr 2007
5 Beiträge
 
#1

XML Datenbank Abgleichen Web/Local

  Alt 23. Dez 2007, 02:39
Edit: Falls es eine bessere Datenbank form gibt, welche sich einfacher abgleichen lässt als XML, bitte mich darauf aufmerksam machen. Wobei das ganze ohne SQL laufen soll.


Hallo,

Also folgendes:
Ich schreibe gerade ein Programm welches auf eine XML im Netz zugreift und diese mit einer lokalen XML abgleicht.

Das Problem liegt daran, das sich der Inhalt der im Netz liegenden ständig ändert, und in der Lokalen jeder Eintrag nur einmal vorkommen soll. Dazu hab ich jetzt beim auslesen der XML jeden einzelnen Eintrag mit der kompletten Lokalen XML verglichen.
Das problem ist dann nur das das ganze recht Prozessorlastig wird.
Bei zum Beispiel 120 Lokalen einträgen und 120 Einträgen im Netz hab ich dann schon 120² an schleifen durchgängen. Und da die Datenbank noch stark wächst über die zeit wird das dann schnell nciht mehr Funktionieren.

Das ganze ist folgendermaßen gelöst:
Delphi-Quellcode:
[...]
while assigned(n) do begin
[...]
{Der Teil hier befindet sich in der Prozedur zum auslesen der XML im Web}

if cfg.entry4=true then begin

   if FileExists((GetShellFolder(CSIDL_APPDATA)+'\test\cach.xml'))=false then begin
    form1.xmldoc2.Active:=true;
    form1.xmlDoc2.SaveToFile((GetShellFolder(CSIDL_APPDATA)+'\test\cache.xml'));
    form1.xmldoc2.Active:=false
    end;
    form1.xmldoc2.Active:=true;
    form1.xmldoc2.loadfromfile((GetShellFolder(CSIDL_APPDATA)+'\test\cache.xml'));
    n1:=form1.xmldoc2.DocumentElement.ChildNodes.First;
    while assigned(n1) do begin
   {überprüfung der der Einträge in der Lokalen XML mit der im Web}
    if n1.childnodes['entry1'].text=entry1 then begin
{Falls, vorhanden Aktuallisieren}
      n1.childnodes['entry2'].text:=entry2;
      n1.childnodes['date'].text:=FormatDateTime('dd.mm.yy hh:mm:ss',FileDateToDateTime(it));
      i4:=true;

    end;
    n1:=n1.NextSibling;
    end;


   {Falls nicht vorhanden, wird der Eintrag der Lokalen hinzugefügt.}
    if i4=false then begin

    newentry := form1.xmlDoc2.DocumentElement.AddChild('character');
    newentry.AddChild('entry1'); newentry.AddChild('entry2');
    newentry.AddChild('entry3');newentry.AddChild('entry4');
    newentry.AddChild('entry5');newentry.AddChild('date');
    newentry.ChildNodes['entry1'].text:=name1;
    newentry.ChildNodes['entry2'].text:=level1;
    newentry.ChildNodes['entry3'].text:=class1;
    newentry.ChildNodes['entry4'].text:=race1;
    newentry.ChildNodes['entry5'].text:=playerid;
    newentry.ChildNodes['date'].text:=FormatDateTime('dd.mm.yy / hh:mm:ss',FileDateToDateTime(it));;
    end;
    form1.xmldoc2.SaveToFile((GetShellFolder(CSIDL_APPDATA)+'\test\cache.xml'));
    form1.xmldoc2.Active:=false;
    i4:=false;

    end;
[...]
 n:=n.NextSibling;
end;
[...]
Der Prozesssorleistungsaufwendige teil ist eben die Synchronisation mit der lokalen Datenbank.
Und das würde mit wachsender Datenbank ziemlich Zeitaufwendig werden.

Gibt es da eine Lösung das ganze etwas weniger Prozessorlastig zu erstellen.
Bin mit XML noch nicht so vertraut. Falls es da möglichkeiten gibt da Dinge zu verkürzen etc, könnt ihr mich gerne darauf aufmerksam machen.

Vielen dank im Vorraus.
(Ich werd mich wahrscheinlich vor 12 Uhr nicht mehr hier melden)
~x3m
  Mit Zitat antworten Zitat
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: XML Datenbank Abgleichen Web/Local

  Alt 23. Dez 2007, 08:28
Wenn ich das richtig sehe holst du nur die Daten aus dem Netz? Wenn ja, lad doch einfach die xml aus dem netz und überschreib die lokale damit. Wenn du zusätzliche lokale Einträge ablegen willst leg dann doch eine 2te lokale xml an.
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#3

Re: XML Datenbank Abgleichen Web/Local

  Alt 23. Dez 2007, 11:16
andere möglichkeiten wären...
  • wenn die XML sortiert ist, über die Master/Slave durchzugehen... so brauchst du jede Datei exakt einmal durchgehen O(N*2)
  • Die andere Möglichkeit ist, die Hostdatei mit einen Zeitstempel zu versehen, wann der letzte Datensatz geändert wurde... dann brauchst du nur noch die jüngeren zu vergleichen
<HTH>
  Mit Zitat antworten Zitat
user.x3m

Registriert seit: 23. Apr 2007
5 Beiträge
 
#4

Re: XML Datenbank Abgleichen Web/Local

  Alt 23. Dez 2007, 13:06
Danke ersteinmal für die Antworten.
Ist ein wenig anders:
Also auf die im Web liegende, ändert sich jede Minute.
Und jeder der Einträge kann sich auch jederzeit ändern.
Habe auf die im Web liegende auch keinen einfluss. Ist eine API welche von einem Server bestimmter sorte angeboten wird.

Als erstes soll eine Lokale XML etwas anders Strukturierte XML angelegt, mit Datum und ähnlichem.


Die im Web befindliche enthält nun alle paar minuten geänderte Daten.

Lokal soll nun die XML mit neuen nicht vorhandenen gefüttert werden, und vorhandene sollen Aktuallisiert werden(neues Datum, und der entry2 ändern sich ständig).

Zitat:
# Die andere Möglichkeit ist, die Hostdatei mit einen Zeitstempel zu versehen, wann der letzte Datensatz geändert wurde... dann brauchst du nur noch die jüngeren zu vergleichen
Selbst wenn ich auf die Hostdatei zugriff hätte, es sind nicht immer alle Datensätze verfügbar, es sind immer nur bestimmte welche sich auslesen lassen.

Lokal soll, über Zeit eine Datenbank mit den Datensätzen angelegt werden.

Zitat:
wenn die XML sortiert ist, über die Master/Slave durchzugehen... so brauchst du jede Datei exakt einmal durchgehen O(N*2)
Da weis ich nicht was du damit meinst. In wiefern struckturiert?

Hier mal die Strucktur der XML:
Delphi-Quellcode:
<?xml version="1.0" encoding="UTF-8"?>
<stats>
 <user>
  <id>123456</id>
  <name>Mustermann</name>
  <access>1</access>
  <entry1>1</entry3>
  <entry2>1</entry2>
 </user>
</stats>
  Mit Zitat antworten Zitat
Antwort Antwort


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:34 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