Delphi-PRAXiS
Seite 2 von 6     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi 100 milliarden Werte speichern! (https://www.delphipraxis.net/72165-100-milliarden-werte-speichern.html)

3_of_8 26. Jun 2006 18:15

Re: 100 milliarden Werte speichern!
 
Worum gehts eigentlich?

Avatar 26. Jun 2006 18:17

Re: 100 milliarden Werte speichern!
 
Wenn das nur zur Ermittlung einer Wahrscheinlichkeitskurve werden soll, dann kann man das auch anders angehen ;)

alzaimar 26. Jun 2006 18:49

Re: 100 milliarden Werte speichern!
 
Wer speichert schon 100 Mrd. Daten? Man speichert doch nur die Bereiche, "in denen etwas los ist", schmeisst also die Messpunkte weg, die "uninteressant" sind. Uninteressante Messpunkte sind die Messpunkte, die sich mit einer -wie auch immer gearteten- Interpolation approximieren lassen. Das ist das alte Spiel der Datenkompression: JPEG zeigt, wie es so geht (Reduktion durch Interpolation).

Bei 2D-Daten kann man diverse Verfahren verwenden.

dizzy 27. Jun 2006 01:19

Re: 100 milliarden Werte speichern!
 
Zitat:

Zitat von alzaimar
Das ist das alte Spiel der Datenkompression: JPEG zeigt, wie es so geht (Reduktion durch Interpolation).

Mh, kann man glaub ich so nicht stehen lassen, auch wenn es OT ist :). JPEG geht lediglich in einem (kleinen) Teilaspekt mit Interpolation vor: Das Bild wird in das YCC-Format (bzw. YUV) gewandelt, und die beiden Farbkanäle werden (je nach Subformat aber auch nur!) meistens mit halber Größe behandelt. Die Interpolation beim Dekodieren ist meist sogar nur simples Vervielfältigen von Pixeln, da man den Unterschied kaum ohne technische Hilfe erkennen würde.
Der wesentliche Anteil der Kompression nutzt eine Reduktion um hohe Werte im Frequenzraum von Bildteilen aus (da sie wenig zum Bildeindruck beitragen), um dadurch lange 0-Ketten zu erzielen. Diese werden RLE komprimiert, und zum Schluss noch ein Huffman drübergejagt.


Zum Thema: Je nach dem wie die Daten aussehen, und ob du eine Zuordnung zu einer Skala (etwa das zeitliche Auftreten der Werte) machen kannst, wäre noch folgendes denkbar: Du speicherst nur wesentliche Veränderungen zu einem Vorgängerwert ab, und zusätzlich einen Zeitindex (oder was auch immer als Skala dienen kann) um (falls überhaupt nötig) eine skalentreue Rekonstruktion machen zu können.
Das würde allerdings erst effizient werden, wenn zu erwarten ist, dass der Wert nicht schnell oder oft große Differenzen bildet, da ja eine Zusatzinformation her müsste. Vorteil bei dem Vorgehen könnte sein, dass relevante Stellen (oftmals ja bei größeren Wertänderungen) nicht verloren gingen.
Da du uns aber bisher nicht sagen wolltest, was das für Werte sind, ist schlecht einzuschätzen ob das für dich toll ist ;)


Gruss,
Fabian

sir-archimedes 27. Jun 2006 07:55

Re: 100 milliarden Werte speichern!
 
Ähh nur ein ganz kurzer Hinweis: Man teilt bei JPEG das Bild in 8x8 Blöcke auf und führt anschließend eine diskrete Kosinustransformation durch. Diese ist noch gar nicht verlustbehaftet. Man erhält nur eine andere (kompaktere) Darstellung des Bildes - eine 8x8-Matrix, deren Einträge immer kleiner werten je weiter man nach rechts/unten gelangt. Anschließend führt man eine Quantisierung durch - das heißt die Matrix wird passend gerundet - sehr kleine Werte verschwinden. Dann komprimiert man die Matrix geeignet wodurch aber auch keine weitere Information verloren wird.

Bei der Dekodierung macht man das ganze rückwärts, muss aber nicht mehr "durch gleiche Werte" interpolieren - die Blöckchenbildung, die man anschließend erkennt, resultieren aus der Quantisierung die nach der Kosinustransformation stattgefunden hat. Man interpoliert höchstens, wenn man das Bild vergrößert/verkleinert/dreht. Dafür gibt es verschiedene Verfahren, die aber alle nichts mit JPEG zu tun haben.

Generell kann man, wenn man ein Signal hat, prüfen, inwieweit man es glätten kann. Dafür gibt es viele Algorithmen - nicht nur den Mittelwert ;-) Man kann z.B. via Wavelet-Transformation hohe Frequenzen filtern, oder eine Fourier-Transformation durchführen und hohe Frequenzen löschen. Alternativ kann man natürlich Gaussische Filter anwenden, die einen gewichteten Mittelwert berechnen, etc. Der Glättungsalgorithmus der Wahl hängt allerdings stark von dem Signal hat und dem, was man an Details behalten will. Hat man zum Beispiel harte Kanten, bietet sich ein Mittelwertfilter nicht an, da die Kanten stark geglättet und damit weich gemacht werden...

Zu all diesem sollte man jedoch ohne weiteres einiges an Literatur finden!

dizzy 28. Jun 2006 11:17

Re: 100 milliarden Werte speichern!
 
Das war (mir zumindest - hab ja schonmal nen jpeg-Kompressor von Hand gebastelt) bislang bekannt, hat aber im Wesentlichen nichts mit der Ausgangsfrage zu tun ;). Mein kleiner JPEG-Exkurs war nur dazu da, um aufzuzeigen, dass der Fragesteller besser nicht nach JPEG sucht, um damit sein Problem zu lösen, da es keine passende Methode darstellt. Zumindest scheint es so, bei den wenigen Infos die wir haben...

mquadrat 28. Jun 2006 11:21

Re: 100 milliarden Werte speichern!
 
Naja mit ner anständigen SQL Datenbank wären auch mehrere GB Daten kein Problem. Ich seh das Problem eher beim Hauptspeicher falls die Daten alle zeitgleich im Client gebraucht werden.

3_of_8 28. Jun 2006 13:48

Re: 100 milliarden Werte speichern!
 
Ich glaub, der meldet sich nicht mehr.

dizzy 28. Jun 2006 13:50

Re: 100 milliarden Werte speichern!
 
Nunja, eine DB wäre sicherlich am ehesten geeignet um auf den Daten zu operieren. Das eigentliche Problem ist denke ich ersteinmal >900GB Plattenplatz herzubekommen. Jedoch hatte der Fragesteller ja bereits eingeschränkt, dass er die Daten einfach nur hinschreiben muss, und nicht damit arbeiten. Daher wäre ein Filestream meiner Meinung nach ebenso geeignet. Die Frage ist halt nur: Werden alle Daten in voller Genauigkeit benötigt, bzw. gibt es ein mögliches gröberes Raster oder signifikante Sprünge die ausreichen? Weil 900GB sind in nicht-kommerzieller Umgebung nicht mal eben besorgbar (zumindest nicht am Stück).
Zudem ist noch die Frage: Wie schnell kommen die Daten herein? Die Platte müsste damit zumindest Schritt halten können :)

LePtitmort 1. Jul 2006 09:31

Re: 100 milliarden Werte speichern!
 
Also ich schildere alles nochmal einwenig genauer:

Ich schreibe an einem Programm, dass die Planetenbahnen von n-Planeten anzeigen (also zeichnen und berechnen) soll.
Ich berechne momentan 15 Millionen neue Positionen und nochmal so viele Geschwindigkeiten in 15 Sekunden.
Hier das Prog!

Achtung kann sein das die Leute mit ein wenig Arbeitsspeicher ihrem Pc ein jehes Ende setzen.... :-D (lieber die Schrittanzahl runtersetzen)
Wir verwenden momentan noch ein Eulerverfahren und haben so vor den 9./10. Planeten unseres Sonnensystemszubeweisen.
Dazu vergleichen wir berechnete Bahn mit der tatsächlichen.

:?: So jemand sagte das ich die Werte (bzw. jeden 10 000sten) in einer list speichern, wie ich schon sagte ich bin noch nicht ganz so Delhpi-fit. Was hat das für Vorteile?
ich brauch die alt berechneten Werte eigentlich nicht mehr, zumindest nicht regelmässig, ich brauch den letzetn Wert der Berechnung und des wars. Gibts noch andere bessere Metheoden?
:?: Und mein Arbeitsspeicher kommt auch langsam an seine Grenzen... bleiben die Arrays im Arbeitsspeicher gespeichert?
:?: Ein weiteres Prob, das ich hab ist ein Scheibenwischereffekt der Auftritt wenn ich den Planeten mache, er "wischt" über meine Paintbox und löscht somit meine alten Bahnen (natürlich nur die Grafik nicht die berechneten Werte im Array). Und speichern und laden des bildes kommt auch nicht in Frage, auf Grund der grossen Schrittanzahl (monmentan wird jeder 200ste Schritt gezeichnet sh. im Programm unten rechts)
:?: Und noch ein letzten Problem, meine extended Zahlen sind immer noch zu ungenau.... wie kann ich noich grössere Genauigkeit bekommen?
:?: Mein Array ist momentan 10 x 10 x 999 999 gross (vom typ "extended") und wenn ich jetzt mein Array löschen will
(bzw. genauer gesagt leeren oder überll ne 0 reinschreiben) dauert das ewig, gibts da nen Trick wie man das beschleunigen kann? irgendein schneller Befehl? weil mit ner for-Schleife einfach durchlaufen lassen dauerts eindeutig zulange.

ich würde mich riesig über Tipps und kongrete Quelltext-ideen freuen.
[weiterhin Vertreter des "Delphi-Anfänger-slangs"]

[edit]:
Das Programm kann nur einmal gestartet werden, weil des array nomentan nicht gelöscht wird, muss des programm einfach neu gestartet werden:
-also "günstige werte" klicken, damit unser Sonnen system berechnet wird
-dann "berechnen"
-dann ankucken :)
-dann schliesen
-dann nochmal starten und wieder von vorne anfangen


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:17 Uhr.
Seite 2 von 6     12 34     Letzte »    

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