AGB  ·  Datenschutz  ·  Impressum  







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

100 milliarden Werte speichern!

Offene Frage von "LePtitmort"
Ein Thema von LePtitmort · begonnen am 26. Jun 2006 · letzter Beitrag vom 6. Jul 2006
Antwort Antwort
Seite 2 von 6     12 34     Letzte »    
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: 100 milliarden Werte speichern!

  Alt 26. Jun 2006, 19:15
Worum gehts eigentlich?
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Avatar

Registriert seit: 11. Mai 2006
5 Beiträge
 
#12

Re: 100 milliarden Werte speichern!

  Alt 26. Jun 2006, 19:17
Wenn das nur zur Ermittlung einer Wahrscheinlichkeitskurve werden soll, dann kann man das auch anders angehen
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#13

Re: 100 milliarden Werte speichern!

  Alt 26. Jun 2006, 19:49
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#14

Re: 100 milliarden Werte speichern!

  Alt 27. Jun 2006, 02:19
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
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
sir-archimedes

Registriert seit: 2. Jan 2006
Ort: Münster
167 Beiträge
 
Delphi 2006 Professional
 
#15

Re: 100 milliarden Werte speichern!

  Alt 27. Jun 2006, 08:55
Ä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!
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#16

Re: 100 milliarden Werte speichern!

  Alt 28. Jun 2006, 12:17
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...
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#17

Re: 100 milliarden Werte speichern!

  Alt 28. Jun 2006, 12:21
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.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#18

Re: 100 milliarden Werte speichern!

  Alt 28. Jun 2006, 14:48
Ich glaub, der meldet sich nicht mehr.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#19

Re: 100 milliarden Werte speichern!

  Alt 28. Jun 2006, 14:50
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
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
LePtitmort

Registriert seit: 25. Jun 2006
20 Beiträge
 
#20

Re: 100 milliarden Werte speichern!

  Alt 1. Jul 2006, 10:31
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.... (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
-ich steck schon immer in der Scheisse nur die Tiefe wechselt-
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 6     12 34     Letzte »    


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 10:57 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