Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   .csv File durchsuchen oder andere Datenbank?? (https://www.delphipraxis.net/46535-csv-file-durchsuchen-oder-andere-datenbank.html)

Osse 2. Jun 2005 17:02

Re: .csv File durchsuchen oder andere Datenbank??
 
Hey Alzaimar,

nicht leicht das ganze für einen E-Techniker :gruebel: :gruebel: , ABER es funktioniert, zumindest in dem kleien Beispiel. Doch da ist noch etwas:
Zitat:

Du kannst natürlich die Methode BtreeCompare an deine Bedürfnisse anpassen. Dabei musst Du aber darauf achten, das 'identische' Records (die also den Vergleichswert '0' liefern) als Identität behandelt, also auch überschrieben werden.
Ich will aber gar nicht dass die Daten überschrieben werden, sondern ich brauche alle Daten als Protokoll. Dies dient da´zu später nach bestimmten Zeiten zu gucken, wann das Telegramm gekommen ist. Ach :wall: , werden sie ja auch nicht, da der Timestamp immer anders ist. Dadurch wird der Verglichswert 0 so nie erreicht!! :angel2:

Ist es dann überhaupt noch sinnvoll solche Datensruktur zu benutzen, oder würdest du etwas anderes vorschlagen??

Ich hab mal einfach versucht, nach den Daten zu sortieren und später das ganze wieder auszulesen. Kam aber leider nichts erfolgreiches raus, außerdem führt jede neue Suchroutine zu einer enormen Verlangsamung. Ansonsten kann ich die Daten ja so lassen wie sie sind und später beimauslesen dann sortieren aufm Grid ausgeben.

Hab das so realisiert :zwinker: :
Delphi-Quellcode:
  If a.msgbuff.ID < b.msgbuff.ID then aresult := -1
  else if a.msgbuff.ID > b.msgbuff.ID then aResult := +1
  else if a.msgbuff.DATA[0] < b.msgbuff.DATA[0] then aResult := -1
  else if a.msgbuff.DATA[0] > b.msgbuff.DATA[0] then aResult := +1
  else if a.msgbuff.DATA[1] < b.msgbuff.DATA[1] then aResult := -1
  else if a.msgbuff.DATA[1] > b.msgbuff.DATA[1] then aResult := +1
  else if a.msgbuff.DATA[2] < b.msgbuff.DATA[2] then aResult := -1
  else if a.msgbuff.DATA[2] > b.msgbuff.DATA[2] then aResult := +1
  else if a.msgbuff.DATA[3] < b.msgbuff.DATA[3] then aResult := -1
  else if a.msgbuff.DATA[3] > b.msgbuff.DATA[3] then aResult := +1
  else if a.msgbuff.DATA[4] < b.msgbuff.DATA[4] then aResult := -1
  else if a.msgbuff.DATA[4] > b.msgbuff.DATA[4] then aResult := +1
  else if a.msgbuff.DATA[5] < b.msgbuff.DATA[5] then aResult := -1
  else if a.msgbuff.DATA[5] > b.msgbuff.DATA[5] then aResult := +1
  else if a.msgbuff.DATA[6] < b.msgbuff.DATA[6] then aResult := -1
  else if a.msgbuff.DATA[6] > b.msgbuff.DATA[6] then aResult := +1
  else if a.msgbuff.DATA[7] < b.msgbuff.DATA[7] then aResult := -1
  else if a.msgbuff.DATA[7] > b.msgbuff.DATA[7] then aResult := +1
  else   aResult := 0;
end;
Wenn ich die Daten dann in einer Listbox ausgebe, siehts am Anfang noch recht gut aus, aber dann :?
Zitat:

ID Data 1 Data2 Data3 .....
21 ; 20 ; 68 ; 89 ; 126 ; 219 ; 107 ; 216 ; 248
21 ; 20 ; 90 ; 65 ; 95 ; 150 ; 226 ; 65 ; 247
21 ; 20 ; 98 ; 55 ; 123 ; 20 ; 197 ; 127 ; 170
21 ; 20 ; 105 ; 80 ; 159 ; 236 ; 28 ; 52 ; 235
21 ; 20 ; 114 ; 104 ; 119 ; 201 ; 197 ; 138 ; 117
21 ; 20 ; 120 ; 153 ; 63 ; 97 ; 8 ; 40 ; 17
21 ; 20 ; 125 ; 117 ; 125 ; 13 ; 27 ; 181 ; 29
21 ; 20 ; 127 ; 240 ; 30 ; 250 ; 85 ; 155 ; 218
21 ; 20 ; 133 ; 191 ; 180 ; 119 ; 249 ; 53 ; 15
21 ; 20 ; 145 ; 249 ; 140 ; 235 ; 107 ; 72 ; 234
21 ; 20 ; 156 ; 20 ; 160 ; 154 ; 213 ; 109 ; 122
21 ; 20 ; 168 ; 212 ; 233 ; 4 ; 217 ; 147 ; 13
21 ; 20 ; 186 ; 240 ; 41 ; 60 ; 122 ; 180 ; 96
21 ; 20 ; 196 ; 39 ; 115 ; 63 ; 66 ; 92 ; 207
21 ; 20 ; 196 ; 173 ; 179 ; 123 ; 106 ; 218 ; 234
21 ; 20 ; 223 ; 225 ; 30 ; 0 ; 33 ; 249 ; 250
21 ; 20 ; 234 ; 48 ; 58 ; 56 ; 30 ; 140 ; 175
21 ; 21 ; 1 ; 234 ; 220 ; 30 ; 181 ; 177 ; 110
21 ; 21 ; 2 ; 19 ; 153 ; 150 ; 121 ; 191 ; 227
Wie gesagt, wenns nicht anders geht, kann ich die Sortierung auch in der Anzeige machen. Da kommt es auf die Zeit nicht an.

Hättest du eine andere Idee??

Nochmal :kiss: für die Super Unterstützung, ist nicht so leicht für mich..

alzaimar 2. Jun 2005 17:17

Re: .csv File durchsuchen oder andere Datenbank??
 
Was ist an der Listbox so falsch? Sieht doch gut aus, sind die nun alle sortiert oder bin ick zu blind? Egal.

Sag doch einfach mal, WONACH du suchen willst, bzw. WAS du auswerten möchtest. Dann deichseln wir das schon. (Oder auch nicht :zwinker:)

Es IST ein vertracktes Problem. Wenn das direkte Speichern in den B-Baum so nicht geht, dann würde ich auch einfach (is ja wohl nur ne Testphase) die Teile in eine Text-Datei reinballern und mit geeigneten suchroutinen später auswertungen machen.

Fragen:
1. Musst Du die Records wochenlag mitschneiden, oder nur für 1-2 Tage, oder wie?
2. Wie hoch ist die Datenmenge, wenn alles ok ist?
3. (Wiederholung) Wonach willst Du suchen und was brauchst Du als Filter/Anzeige?

Osse 2. Jun 2005 17:56

Re: .csv File durchsuchen oder andere Datenbank??
 
NAja, wenn ich mir die letzte Spalte so angucke, ist das wohl nicht mehr so ganz richtig mit 248, 247,170,235,117...

Zitat:

1. Musst Du die Records wochenlag mitschneiden, oder nur für 1-2 Tage, oder wie?
Ich denke, dass das Programm so 2Tage durchläuft. Wollte jeden Tag eine eigene Datei anlegen. Später solle és dann auch möglich sein Nacheinander in den Dateien zu suchen. Sollte hier aber nicht das Problem sein, oder??!!

Zitat:

2. Wie hoch ist die Datenmenge, wenn alles ok ist?
Ok, dann will ich mal einen losrechnen. Mayby hab ich da ja einen Fehler drin.

Max. Übertragungsrate 1 Mbit/s wenn das kürzeste Telegramm 40Bit lang ist und eine Busauslastung von 100% besteht, wovon ausgegeangen werden muss, dann beläuft sich das ja auf:

1oooooo Bit/s
------------- = 25000 Telegramme/s = 25 Telegramme/ms oder hab ich da falsch gerechnet.
40 Bit

Nun die 25000 Telegramme/s * 3600 um auf Stunden zu kommen := 90000000bit/h um das mal komfortabel darstellen

1 byte = 8 bit -> 11250000Byte/h -> 11,25Mb pro Stunde oder :gruebel: :gruebel:

Zitat:

3. (Wiederholung) Wonach willst Du suchen und was brauchst Du als Filter/Anzeige?
- Ich will zunächst nach ID gucken können und alle Telegramme mit der Such ID Darstellen können.
- Ein unterpunkt ist nun nach bestimmten Daten zu suchen, mit zugehöriger ID. Die ID muss immer mit angegben sein.
Bsp.

Ich möchte nach der ID 200 suchen und zwar im 1.Datenbyte sollen alle Einträge zwischen 23-98 und im 4. Datenbyte 34-78 angezeigt werden. Welche Werte die anderen Datenbytes haben ist völlig wurst.
Hier ein Bsp für die Suchanfragen:

ID Data0 Data1 Data2 Data3 Data4 Data5 Data6 Data7
200 --- ----- ---- ----- ---- ---- ---- ----- (alle Telegramme mit ID 200 darstellen)
200 --- 23-98 ---- ----- 34-78 ---- ----- ------

Das ist das höchste der Gefühle, wonach gesucht werden soll.
Wichtig ist nur, dass immer die ID mit angegeben wird. Das ist der "Schlüssel".

Filter(werden nur für die Anzeige realisiert) und das mache ich schon beim ankommen der Telegramme, geht schon. Aber bin für besserungen offen.

alzaimar 2. Jun 2005 19:09

Re: .csv File durchsuchen oder andere Datenbank??
 
Deine Ordnung, die du aufbaust, bedingt, das erst nach ID, dann nach erstem byte, dann nach dem 2. usw sortiert wird. Insofern ist alles o.k. Schau Dir das alles an. Innerhalb gleicher ID ist nach dem 1.Byte aufsteigend sortiert, innerhalb des 2. auch (kommt nicht vor, egal).

Wir haben also 12 MB/h (aufrunden ist immer gut), dann sind das gerade mal ca. 1G für 2 Tage. Mein Btree kann 2G verwalten (meine ich).

Wenn Du nur nach allen Telegrammen einer ID 200 mit 1.DATA zwischen 23 und 98 suchen willst, dann müsstest Du einen Cursor erzeugen, der den Bereich zwischen
ID:200, DATA :23,0,0,0,0,0,0,0 und
ID:200, DATA:98,255,255,255,255,255,255,255
abdeckt. Die Ordnung ist ja streng von links nach rechts. Dann scanst Du den Bereich und zeigst nur die Recs, deren 4.Datenbyte in dem Bereich liegt. Das bekommst Du relativ leicht allgemeingültig hin. Das geht relativ schnell, so im Bereich von (geschätzten) 100.000 - 500.000 recs/sec. Ich meine, Du solltest mal ein paar mio recs ablegen und dann schauen.

Wenn die Performance hinhaut und mein Tool die Tests (Stabilität, Speicherlecks) besteht (also, wenn es 2 Tage durchhält), dann bist Du ein gemachter Mann :mrgreen:

Osse 2. Jun 2005 19:33

Re: .csv File durchsuchen oder andere Datenbank??
 
Jo, super dann wollen "wir" das mal versuchen. Werde erstmal austesten, ob das ganze Threadsicher ist.

Zitat:

Wenn die Performance hinhaut und mein Tool die Tests (Stabilität, Speicherlecks) besteht (also, wenn es 2 Tage durchhält), dann bist Du ein gemachter Mann
Super das Tool. :dancer: :dancer: Sag mal, wo hast du das denn her, oder etwa selber :coder: .

Ist auf jedenfall toll.

Zitat:

Mein Btree kann 2G verwalten (meine ich).
Was passiert dann?? explodiert die Festplatte??

Ok, wird der Adressraum vom Zeiger dann zu groß???

So, dann mal ran an die Buletten, nach soviel Input werde ich schön weiter :coder:

Gruß aus dem verregneten Hamburg

alzaimar 2. Jun 2005 19:41

Re: .csv File durchsuchen oder andere Datenbank??
 
Die Teile musste ich selbst schreiben.
Bei Dateigrößen über 2GB wird unser Universum, so wie wir es kennen, durch etwas viel Schrecklicheres ersetzt. Es gibt Gerüchte, nach dies schon geschehen ist (Frei nach "Hitchhickers Guide to the Galaxy").


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:30 Uhr.
Seite 3 von 3     123   

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-2025 by Thomas Breitkreuz