Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Lösungsansätze gesucht: Datenspeicherung / -analyse (https://www.delphipraxis.net/159631-loesungsansaetze-gesucht-datenspeicherung-analyse.html)

Jacques Murell 6. Apr 2011 08:34

Lösungsansätze gesucht: Datenspeicherung / -analyse
 
Moin,

folgendes Problem: Meine Anwendung bekommt sekündlich Zeichenketten aus dem Internet, begrenzt auf 200 Zeichen pro "Nachricht". Diese werden in meiner Anwendung angezeigt und bearbeitet.

Nun möchte ich gerne Prüfen ob diese Zeichenketten mehrfach ankommen und dem User einen Hinweis geben wenn er die Nachricht schonmal zu Gesicht bekommen hat. Das einzige was mir spontan einfiel ist die Nachrichten in eine Datenbank zu packen. Problem dabei: Schafft eine Datenbank das performancemäßig? Sagen wir wenn schon 2000 Nachrichten a 200 Zeichen in der DB liegen, die neue kommt rein bleibt ja nur eine Sekunde Zeit herauszufinden ob die Nachricht früher schonmal kam - braucht die DB zu lange um mir das anzuzeigen kommt schon die nächste Nachricht.

Hat irgendjemand einen Vorschlag was man da schönes machen könnte? Bin für jeden Hinweis dankbar :)

Jumpy 6. Apr 2011 09:06

AW: Lösungsansätze gesucht: Datenspeicherung / -analyse
 
Der Test, ob eine Nachricht schon mal da war muss ja nicht in der Zeit gemacht werden, in der die Nachrichten kommen, sondern in der Zeit, die der User braucht, diese zu prüfen. Oder läßt sich der User diese auch zur Echtzeit anzeigen, d.h. jede Sekunde eine neue Nachricht (heißt der vllt. Data)?

jfheins 6. Apr 2011 09:36

AW: Lösungsansätze gesucht: Datenspeicherung / -analyse
 
Hmmm ... mit Strings könnte das bei großen Datenmengen langsam werden. Abhilfe schafft hier eine Quersumme oder ein kurzer Hash. Wenn diese Spalte indiziert ist, können relativ schnell relativ viele Daten ausgeschlossen werden.

oder direkt die varchar Spalte indizieren. Ist vielleicht nicht so flott, aber für 2000 Datensätze (eine lächerlich kleine Menge für eine richtige Datenbank) sollte das schon reichen.

jobo 6. Apr 2011 09:49

AW: Lösungsansätze gesucht: Datenspeicherung / -analyse
 
Ich würde auch sagen, dass eine Datenbank davon nicht aus dem Tritt kommen sollte.
Zumal es vermutlich eine lokale, single User Db sein würde?
Ein Testselect auf 1,5 Mio Ds mit exakter Gleichheit auf einer indizierten Textspalte lag hier bei 0,5 Sekunden.

mquadrat 6. Apr 2011 10:43

AW: Lösungsansätze gesucht: Datenspeicherung / -analyse
 
Prinzipiell würde ich da kein Problem sehen, wenn halbwegs regelmäßig aufgeräumt wird.

Zum Thema hashen vor dem Speichern: Müsste man mal schauen was die DB bei einem Index auf einem varchar() Feld macht. Wenn die selber auch hasht, dann würde man nur Zeit verschenken.

rokli 6. Apr 2011 11:23

AW: Lösungsansätze gesucht: Datenspeicherung / -analyse
 
Warum legst du nicht einfach einen Primärschlüssel auf das Feld in der Tabelle? Dann hast du garkein Problem mehr, das die DB dann die Speicherung doppelter Sätze dirket ablehnen würde. Wenn Du den Satz dann trotzdem brauchst, legst Du ihn stattdessen in eine andere Tabelle ab ... und alles ist gut.

Welche DB sollst denn überhaupt sein?

Moin
Rolf

Bbommel 6. Apr 2011 12:40

AW: Lösungsansätze gesucht: Datenspeicherung / -analyse
 
Ist denn eine Datenbank da wirklich nötig? Dazu wissen wir wahrscheinlich zu wenig darüber, was du wirklich machen willst, aber ich würde mal überlegen, ob es nicht sinnvoll wäre, in eine ganz andere Richtung zu denken, und die neu ankommenden Strings zumindest vorübergehend lokal im Speicher zu belassen. Wenn du die neu ankommenden Strings in einer sortierten Stringliste im Speicher hältst, dann sollte das Prüfen auf Vorhandensein und auch das sortierte Einfügen neuer Strings innerhalb einer Sekunde keinerlei Problem sein.

Auch wenn du diese Liste bspw. über eine ganze Stunde füllst, hast du ja gerade mal ca. 1,5 MB an Speicher belegt, was heute kein Problem sein sollte (60*60 Sekunden*400 Byte).

Geht natürlich nicht, wenn die Daten unbedingt und sofort dauerhaft in der DB gespeichert werden müssen.

Bis denn
Bommel

s.h.a.r.k 6. Apr 2011 12:44

AW: Lösungsansätze gesucht: Datenspeicherung / -analyse
 
Eine Datenbank lacht über diese Mengen. Wenn du einen Index über die Spalte erzeugst, dann sollte es auch keinerlei Probleme geben.

Alternativ solltest du überlegen, ob eine DB-Anbindung wirklich sinnvoll ist. Schau dir evtl. mal THashedStringList aus der IniFiles-Unit an. Gerne auch in Kombination mit MD5-Hashes nutzbar (oder vergleichbares).

webcss 6. Apr 2011 12:51

AW: Lösungsansätze gesucht: Datenspeicherung / -analyse
 
Das riecht nach dem Einsatz für eine Key/Value DB (BigTable), oder noch besser mongodb. Die sind für solche Aufgaben nahezu prädestiniert.
Schau's Dir mal an...

Jacques Murell 6. Apr 2011 13:07

AW: Lösungsansätze gesucht: Datenspeicherung / -analyse
 
Danke erstmal für Eure Antworten. :)

Nein eine Datenbank wird nicht vorausgesetzt, das war nur irgendwie das einzige was mir spontan einfiel. :stupid:

Zitat:

Oder läßt sich der User diese auch zur Echtzeit anzeigen, d.h. jede Sekunde eine neue Nachricht (heißt der vllt. Data)?
So in etwa, ja.

Zitat:

Zumal es vermutlich eine lokale, single User Db sein würde?
Genau. Allgemein sollen die Daten bei jedem Programmstart gelöscht werden (aufräumen^) das heißt ich schätze maximal 15.000 Datensätze könnten sich bei einer Sitzung anhäufen.

Zitat:

Wenn du die neu ankommenden Strings in einer sortierten Stringliste im Speicher hältst, dann sollte das Prüfen auf Vorhandensein und auch das sortierte Einfügen neuer Strings innerhalb einer Sekunde keinerlei Problem sein.
Sowas wäre mir am liebsten, ja. Aber ich bildete mir ein eine StringListe sagen wir mit 2000 Datensätzen nach einem zu durchsuchen würde wesentlich länger als eine Sekunde dauern? :gruebel:

Mal ganz davon abgesehen das ich mich nicht entscheiden könnte welche DB es denn sein soll, was ist aktuell zur Zeit? Firebird?

Aber ich schau mir erstmal eure Vorschläge an, vielen Dank. :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:40 Uhr.
Seite 1 von 2  1 2      

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