Daten einer Zeitspanne ohne < > ermitteln

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Michael Schneider hat geschrieben:gadfly funktioniert bislang einwandfrei unter python 2.2.
Hi Michael!

Ich kenne *KirbyBase* ja nicht, deshalb interessiert es mich um so mehr, ob du einen Performanceschwund feststellen konntest, oder ob es sonst einen Grund für dich gab, warum du KirbyBase nicht verwendet hast.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

gerold hat geschrieben:Ich kenne *KirbyBase* ja nicht, deshalb interessiert es mich um so mehr, ob du einen Performanceschwund feststellen konntest, oder ob es sonst einen Grund für dich gab, warum du KirbyBase nicht verwendet hast.
Hi Gerold!

Mir hat anfangs gefallen, dass KirbyBase keine In-Memory Datenbank ist (eigentlich ist es eher eine komfortable Dateiverwaltung). Das wäre gut bei einem kleinen Arbeitsspeicher, aber mit 4 Gigabyte ist das eher unproblematisch.

Beim Vergrößern oder Löschen von Einträgen werden die ganzen Zeilen mit Spaces aufgefüllt, so dass die Datei öfters mal defragmentiert werden muss. Da die Daten nicht im Speicher verwaltet werden gehe ich davon aus, dass die Datei bei jeder Suche neu gelesen werden muss und ich habe nicht probiert was passiert, wenn man Strings mit Zeilenumbruch oder anderen Sonderzeichen verwendet (ich gehe davon aus, dass die nicht maskiert werden). Die Daten werden im ASCII Textformat gespeichert, auch die Zahlen! Das braucht nicht nur mehr Speicher als ein 4-Byte Int sondern bedeutet auch, dass die Zeilen bei jedem Parsen zerlegt (Pipe als Trennzeichen) und in die entsprechenden Typen umgewandelt werden müssen.

Und last but not least war die API (zumindest vergleichsweise) kompliziert. Nicht, dass ich bis Anfang dieser Woche auch nur einen Schimmer von SQL hatte. Aber der jeder SQL-Kundige kommt intuitiv spielerisch mit der API von Gadfly zurecht. Das fand gerade mein Chef vorteilhaft. ;-) Darum GADFLY!

Die Performance von KirbyBase werde ich aber nochmal im Vergleich zu Gadfly testen.

Grüße,
Michael
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Michael Schneider hat geschrieben:Darum GADFLY!
Hi Michael!

Vielen Dank für deinen Bericht. Damit hast du etwas Licht in die Sache gebracht.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Hannes-Spz
User
Beiträge: 123
Registriert: Sonntag 7. August 2005, 22:42

hi!
ich mag davon nicht allzuviel ahnung zu haben, aber vl. kann es ja IRGENDWAS bringen:
was wäre, wenn man die dateien auf 5 unterteile aufteilen könnte und dann jeweils so viele neue threads started, die immer in einem abschnitt nach den re's suchen?
dann ist zwar mindestens genausoviel der prozessor belastet, jedoch dürften die ergebnisse, da sie ja parallel erstellt werden, schneller kommen...bzw. könnte man sich sogar dadurch VL. erlauben, die ganze datei zu durchkramen .. und bei 4gigabyte.... :)

wie gesagt: ist nur nen vorschlag :oops: ; lg hannes;
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

Hi Hannes,

multi-threading ist ein guter Ansatz, wenn man beispielsweise auf Ereignisse wartet, wobei Festplatte und CPU Däumchen drehen. :)
Leider hilft es nichts, einen Prozess mit (fast) 100% CPU-Nutzung auf 5 threads zu verteilen, da die sich auch nur die vorhandene Performance aufteilen können, so dass jeder idealerweise 20% bekommt.

Bevor man aber irgendwas mit REs machen kann, muss die Datei in den Arbeitsspeicher. Auch hier hilft es nichts, die Datei aufzuteilen und gleichzeitig einzulesen. Du hast weniger Leseleistung (ist wie Lesen von fragmentierten Daten), beanspruchst aber mehr Filehandler und Dein Lesekopf veranstaltet nen Breakdance, wenn er zwischen den Sektoren umherspringt.

Und ich kenne keine Funktion, die den Dateiinhalt durchsuchen könnte, ohne ihn vorher von der Platte einzulesen. :-(

Übritens umfasst meine Datenbankstruktur derzeit 38 Tabellen, inklusive LUTs und Zwischen-LUTs (look-up tables) für einige m:n-Beziehungen.

Grüße,
Michael
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Michael Schneider hat geschrieben:Und ich kenne keine Funktion, die den Dateiinhalt durchsuchen könnte, ohne ihn vorher von der Platte einzulesen.
Doch! Das macht "CIA_search_for". Mit der selben Funktion wurden damals erfolgreich Massenvernichtungswaffen im Irak gefunden. :P

SCNR
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

Hi Joghurt!
Joghurt hat geschrieben:
Michael Schneider hat geschrieben:Und ich kenne keine Funktion, die den Dateiinhalt durchsuchen könnte, ohne ihn vorher von der Platte einzulesen.
Doch! Das macht "CIA_search_for". Mit der selben Funktion wurden damals erfolgreich Massenvernichtungswaffen im Irak gefunden. :P
SCNR
Ich gebe es ungern zu, aber hier war ICH offenbar falsch informiert.

Aber es gäbe tatsächlich eine Möglichkeit, die Abfrage per multithreading zu beschleunigen: ich teile die Datei in 3 gleich große Teile und verwalte 2 der Teile auf anderen Workstations. Dann kann ich bei einer Abfrage auf der eigenen Platte suchen und gleichzeitig die Daten der anderen beiden Workstations per 100 Mbit-Netzwerk reinholen. Dann komme ich auf fast 20 MByte/s. Aber ob das der BUS mitmacht...? :D

Grüße,
Michael
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Antworten