# Arbeitsspeicher auf Festplatte auslagern



## leon_20v (31. Mrz 2014)

Hallo zusammen,

ich bin ein ziemlicher Java-Noob und schreib gerade an meiner BA. Ich wollte mir ein paar Tips, Ideen und Anregungen holen wie ich am besten mein Problem umsetzen könnte und was es denn für Referenzen dazu geben könnte.

Ich hab einen Graph bei dem die Abbildung von beliebig vielen Messwerten auf beliebig viele Y-Achsen möglich ist. Hier soll jetzt eine Speicherung über einen langen Zeitraum ermöglicht werden. 

Dies gibt natürlich eine sehr große Menge an Daten im Arbeitsspeicher und die müssen da raus. Die Anforderung ist, möglichst wenig Speicherauslastung zu haben, aber keine Ladeverzögerung.

Ich muss also die Daten die eigentlich im Arbeitsspeicher sind auf die Festplatte speichern und on the fly bei bedarf von der Festplatte laden. 

Habt ihr Anregungen wie ich an die Sache rangehen könnte? Gibt es vll Java-Klassen die mir da vll schon weiterhelfen?

Mein Problem wird sein, dass ich keine Zeit zum Suchen der richtigen Punkte zum Anzeigen habe. Das ganze soll absolut Performant sein. Hier habe ich mir überlegt mehrere Dateien für immer 10 sekunden Daten zu speichern und diese in den Arbeitsspeicher zu laden.  Wie das ganze dann bei einem herauszoomen nachladet, bin ich mir noch sehr unschlüssig.


Vielen Dank für eure Anregungen.


----------



## Thallius (31. Mrz 2014)

Du solltest mit einer Datenbank arbeiten nicht mit Dateien.

Gruß

Claus


----------



## leon_20v (31. Mrz 2014)

Das lesen und schreiben in eine Datenbank dauert meiner Meinung nach viel zu lang.


----------



## diggaa1984 (31. Mrz 2014)

beliebig viele messwerte .. dateien für jeweils 10s .. wie lange soll denn gemessen werden? 1 Stunde, 1 tag, 1 monat? Rechne mal hoch wieviele Dateien du dann hättest, das kannst nicht verantworten.

Eine Datenbank ist finde ich durchaus brauchbar. Was heisst es muss performant sein? Welche Anforderungen hast du dabei? Welche Funktionen müssen in welcher Zeit realisierbar sein?

Eine Datenbank kannst du super nach bestimmten Datensätzen abfragen (zb. Zeitpunkt). Auch da wird sie schnell genug sein. Eine Datei darfst du selber noch parsen, bei der Datenbank kannst du dir die Werte schon richtig portionieren.


----------



## Ruzmanz (31. Mrz 2014)

Optimieren kann man nur, wenn man alle Randbedingungen kennt. Anzahl, Größe, Wertebereich, Struktur, etc. der Daten. Auf was soll optimiert werden? -> Antwortzeit, Durchsatz oder Skalierbarkeit. Zugriffsarten (Select und Insert oder auch Update). Zudem muss man wissen, was man vernachlässigen kann. Wenn ich im Bereich 0 bis 10 ungefähr eine Milliarden Werte habe und sehr weit rauszoome ... kann ein Mensch dann jeden Wert sehen?

Laut Wikipedia:



> Die wesentliche Aufgabe eines DBS ist es, große Datenmengen effizient, widerspruchsfrei und dauerhaft zu speichern und benötigte Teilmengen in unterschiedlichen, bedarfsgerechten Darstellungsformen für Benutzer und Anwendungsprogramme bereitzustellen.



Wenn dir das nicht gefällt, kannst du auch was eigenes zusammenschustern. Eine für deinen Anwendungsfall zugeschnittene Datenbank zu verwenden ist am besten. Zumindest wird es keine relationale Datenbank sein ...


----------



## Thallius (31. Mrz 2014)

leon_20v hat gesagt.:


> Das lesen und schreiben in eine Datenbank dauert meiner Meinung nach viel zu lang.



Du hast definitiv überhaupt keine Ahnung von Datenbanken...

Jede halbwegs moderne Datenbank ist derart optimiert, das bei einem gut durchdacht Query du selber niemals schneller an deine Daten kommst egal was du machst.

Der Trick ist natürlich nicht nur 

SELECT * FROM Tabelle

Daten=fetch_all();

Zu benutzen sondern sich vorher mal ein gutes Buch durchzulesen und zu kapieren wie man Daten optimal aus einer Datenbank herausholt. Um schreiben geht es hier ja nicht. Da ist die Geschwindigkeit ja relativ egal.

Gruß

Claus


----------



## Tobse (31. Mrz 2014)

Dass ein Datenbankzugriff im vergleich zum einlesen von zig' Dateien "viel zu langsam" ist, ist faktisch kompletter Humbug. Eine Datenbank ist, wie meine Vorredner schon erleutert haben, direkt darauf zugeschnitten, große Datenmengen bequem und schnell verfügbar zu machen. Was meinst du denn wie Dienste wie Facebook oder Google die Daten verarbeiten? Da ist eine Datenbank die einzige mögliche Lösung. Gleiches gilt meiner Ansicht nach auch für deinen Usecase.


----------



## leon_20v (31. Mrz 2014)

Gemessen werden soll über 10h. Dabei kommen alle 200ms Daten. Die Größe ist nicht bestimmt.

Perfomant bedeutet, dass ich in dem Graph ohne Verzögerung scrollen kann, sowie zoomen. Diese riesigen Mengen in eine Datenbank schreiben halte ich für keine gute Idee.

Ich wollte eigentlich bytes schreiben. Wenn ihr sagt eine Datenbank ist eine gute idee dann werde ich das mal vorschlagen. Das war aber schonmal im Gespräch und man sagte es sei zu langsam. Ich soll mir was schnelleres einfallen lassen.


----------



## Tobse (1. Apr 2014)

leon_20v hat gesagt.:


> Gemessen werden soll über 10h. Dabei kommen alle 200ms Daten. Die Größe ist nicht bestimmt.



Das sind insgesammt 180000 Werte. Wenn das je ein byte ist sind das 175KiB. Sind es je 4 byte (ein float z.B.) sind es 703KiB. Und selbst bei 8 byte je Datenpunkt sind es noch 1,41MiB. Das lässt sich wunderbar komplett in den RAM laden. Und schneller als von dort bekommst du es schlicht nicht.

[OT]180000 Datenpunkte oder 1,41MiB sind für eine Datenbank Kinkerlitzchen; eine Datenbank wäre hier tatsächlich nicht die performanteste lösung weil sie schlicht Zeit mit Features verschwendet, die der TE (wahrscheinlich) garnicht braucht. Und selbst wenn, eine SQLite-Datenbank ließe sich bei der Beschaubaren größe sicher auch im RAM platzieren.[/OT]


----------



## leon_20v (1. Apr 2014)

Ja ich soll aber ein Speicherentlastendes konzept entwickeln weil wohl im Feld mit der akutellen Implementierung der Speicher vollgelaufen ist.

Ich habe immer 2 Werte. Nen Key die Zeit und den Y-Wert dazu.

Es kann beliebig viele Graphn in einem Graph geben.

Dh.

180000 x anzahl = ??

Die Daten sind beides double, also 8 byte. Da kommt dann schon was zamm.

Und sorry ich habe mich verschrieben, es sind 20ms.


----------



## leon_20v (1. Apr 2014)

Also hab mich abgesprochen, Datenbank fällt definitiv flach und im Arbeitsspeicher soll das ganze nicht sein.


----------



## ChristianK (1. Apr 2014)

Ich finde das amüsant. Es muss schnell sein, absolut performant. Was du nicht brauchen darfst ist RAM. Ähm, ja, ok... Ram ist heute nicht mehr so teuer, dass man 50 MB muss auf die Platte auslagern. 

Also willst du entweder eine ruckelfreie absolut schnelle Datendarstellung oder einen kleinen RAM. Das eine schliesdt - vermutlich - das andere aus. Ausser du setzt SSD & co voraus.

Btw: Ist deinem Vorgesetzten klar, dass jeder Datensatz, der dargestellt wird, so oder so über den RAM geht und solange eine Instanz (als Objekt, ...) von ihm vorhanden ist, auch im RAM ist?


----------



## diggaa1984 (1. Apr 2014)

Darstellung eines Datensatzes braucht ja nicht zwingend soviel RAM wie der Datensatz selber.


----------



## ssoul26 (1. Apr 2014)

Sicher, dass die Aufgabenstellung auch richtig verstanden worden ist?
Zeig doch mal einen Beispielsdatensatz samt Darstellung und momentaner Speicherung.


----------



## leon_20v (1. Apr 2014)

Ja genau so ist es, es ist so gefordert deswegen mach ich es so.


Ein Eintrag sieht so aus:

Als key dient die aktuelle Zeit in millisekunden.
double key(x) = 170000

Wert ist ein wert
double value = 293.03983848294

Das ein Punkt in einer Hashmap, davon kann es beliebig viele geben. Z.B. einen Punkt alle 20ms pro Graph und davon kann es auch 100 geben. 

Einde Datenbank hat viel zu viel Overhead.

Ein 2 Gigabytespeicher läuft wohl immer voll deswegen ist es gefordert. Ich selber hatte noch nicht die Gelegenheit das zu testen, da ich den Versuchsaufbau nicht nachstellen kann.

Es ist jetzt einfach gefordert den Speicher zu entlasten. Wenn ne normale Festplatte zu langsam ist, muss evtl. ne SSD herhalten. 

Auf jedenfall soll ich das ganze jetzt vom Speicher raus und auf die Platte schieben.

Ich muss ja nicht direkt von der Platte lesen, ich kann ja immer Buffern.

Ich dachte ich schreib immer 10 Sekundendateien und Buffer mir dann immer 2 mal den Anzeigebereich im Speicher.


----------



## Tobse (1. Apr 2014)

Also diese Anforderung ist tatsächlich totaler Schwachfug. Ich denke nicht, dass ein Computer mit nur 2GB RAM über den technischen Fortschritt einer SSD verfügt.

Mit den neuen Werten (Messfrequenz 50Hz, 16 Byte pro Datenpunkt) ergeben sich meiner Rechnung zu Folge folgende Werte:

3.600 Sekunden (eine Stunde) mal 10 sind 36.000 Sekunden.
Pro Sekunde kommen 50 Datenpunkte, sind 1.800.000. Mit je 16 Byte pro Datenpunkt sind das 28.800.000 Byte (27,47MiB) pro Graph.

Wenn du dir aktuelle Anwendungen Anschaust (alleine Meine IDEs belegen teilweise 300-400MB) sind 27,47MB im RAM nicht der Rede wert.

Also folgender Vorschlag:
Wärend der Aufzeichnung speicherst du die Werte sowohl im RAM als auch in einer Datenbank. Soll jetzt ein Graph dargestellt werden, der nicht im RAM ist, lädst du ihn aus der Datenbank nach (bei 27,5MiB sollte das mit einer typischen HDD in knapp ner halben Sekunde, mit ner SSD in ein paar Millisekunden zu schaffen sein).

Bei 10 Graphen hast du dann eine Speicherauslastung von 274,4MiB. Wenn das den 2GB-Rahmen sprengt dann schlage deinem Chef (oder wer auch immer dich damit beauftrag hat) doch vor, dass es günstiger ist 50€ in 8GB DDR3-Ram zu investieren anstatt 200€ in deine Arbeitszeit um langsamere Hardware auf die gleiche Geschwindigkeit zu kriegen.


----------



## nvidia (1. Apr 2014)

Tobse hat gesagt.:


> [...]n deine Arbeitszeit um langsamere Hardware auf die gleiche Geschwindigkeit zu kriegen.



Nicht vergessen das dieses Thema bestimmt etwas mit seiner BA zu tun hat. Und sicher ist ein Anliegen der BA andere Methoden und Möglichkeiten zu eruieren und zu bewerten. Und unter dem Gesichtspunkt BA, hat er eine Aufgabe mit bestimmten Rahmenbedingungen erhalten und soll diese nun lösen. Dabei ist es egal was du persönlich für sinnvoll hältst. Sieh es als Herausforderung, und natürlich gehört auch der Prozess dazu vll. festzustellen das althergebrachtes angemessen ist.

Was mich jedoch grundsätzlich stört ist die Ablehnung des OT ggü. Datenbanken, das Thema Datenbanken ist ein ziemlich großer Spielplatz mit teilweise hochspezialisierten Lösungen für bestimmte Anwendungsfälle, es muss nicht immer das 0815 RDBMS sein und selbst die haben oft spezielle Erweiterungen für Zeitreihen.

Na jedenfalls, kann man im Internet nach dbms, time series, time sequence data, time series storage etc. suchen. Das sollte weiterhelfen,


----------



## Tobse (1. Apr 2014)

nvidia hat gesagt.:


> Nicht vergessen das dieses Thema bestimmt etwas mit seiner BA zu tun hat.


Uppsala, das hatte ich vergessen.



nvidia hat gesagt.:


> Was mich jedoch grundsätzlich stört ist die Ablehnung des OT ggü. Datenbanken, das Thema Datenbanken ist ein ziemlich großer Spielplatz mit teilweise hochspezialisierten Lösungen für bestimmte Anwendungsfälle, es muss nicht immer das 0815 RDBMS sein und selbst die haben oft spezielle Erweiterungen für Zeitreihen.
> 
> Na jedenfalls, kann man im Internet nach dbms, time series, time sequence data, time series storage etc. suchen. Das sollte weiterhelfen,


Signed. Es gibt sehr viele verschiedene Datenbanksysteme die auf ganz andere Dinge ausgelegt sind. Aber ich fürchte, dass eine Datenbank (sofern brauchbar implementiert) bestimmte Datensätze die oft abgefragt werden auch im RAM cachen wird, solange man das nicht abschaltet.

Ich denke auch, dass der TE jetzt seine Optionen kennt. Über die Sinnhaftigkeit der einzelnen Details kann man sich jahrelang auslassen und diskutieren.


----------



## leon_20v (1. Apr 2014)

nvidia hat gesagt.:


> Nicht vergessen das dieses Thema bestimmt etwas mit seiner BA zu tun hat. Und sicher ist ein Anliegen der BA andere Methoden und Möglichkeiten zu eruieren und zu bewerten. Und unter dem Gesichtspunkt BA, hat er eine Aufgabe mit bestimmten Rahmenbedingungen erhalten und soll diese nun lösen. Dabei ist es egal was du persönlich für sinnvoll hältst. Sieh es als Herausforderung, und natürlich gehört auch der Prozess dazu vll. festzustellen das althergebrachtes angemessen ist.
> 
> Was mich jedoch grundsätzlich stört ist die Ablehnung des OT ggü. Datenbanken, das Thema Datenbanken ist ein ziemlich großer Spielplatz mit teilweise hochspezialisierten Lösungen für bestimmte Anwendungsfälle, es muss nicht immer das 0815 RDBMS sein und selbst die haben oft spezielle Erweiterungen für Zeitreihen.
> 
> Na jedenfalls, kann man im Internet nach dbms, time series, time sequence data, time series storage etc. suchen. Das sollte weiterhelfen,




Vielen Dank für eure Antworten. Da ich die Datenmenge selber nicht nachstellen kann, werde ich morgen nochmal genau nachfragen, warum es aus dem Arbeitsspeicher raus soll. 

Da es eben auch um die Arbeit geht, kann ich nicht zu viele Informationen raus geben, da ich es schlichtweg ned darf. 

Mit der Datenbank habe ich mit meinem Vorgesetzten gesprochen und dieser sagt defintiv keine Datenbank, da dies zuviel Overhead habe. Ich selber kenne mich mit Datenbanken zu wenig aus um das entscheiden zu können.

Wegen der Arbeitsspeichergeschichte, das ganze ist ja bereits implementiert im Arbeitsspeicher und der ist übergelaufen nach paar Stunden, sonst würden ja die Anforderungen nicht gestellt.


----------



## leon_20v (2. Apr 2014)

Also das Problem ist wohl, dass ich pro ms, 64 Punkte haben kann. 

Datenbank ist raus, ich soll Binaries schreiben. 


Vielleicht mag mir ja jemand da ein paar Tips geben wie es am besten zu lösen ist.


----------



## nvidia (2. Apr 2014)

leon_20v hat gesagt.:


> Also das Problem ist wohl, dass ich pro ms, 64 Punkte haben kann.
> [...]



64 Werte pro ms, das ist echt niedlich. Nur mal zum Vergleich, Twitter verarbeitet pro Minute 170 Mio. Datenpunkte für Metriken. Und jetzt darfst du raten wie sie die Daten speichern, in einem Cassandra-Cluster. Cassandra ist übrigens eine Datenbank. Natürlich haben die noch relativ viel eigenen Kram um den ganzen Stack zu optimieren. Um Anfrage zu beschleunigen werden "in Memory Caching"-Techniken verwendet[2]. Die Architektur[1] kann jedoch als Inspiration dienen. 

[1]https://blog.twitter.com/2013/observability-at-twitter
[2]Bei Twitter ist das IMHO closed source und eine Eigenlösung. Für den Eigenbedarf kann man sich sachen wie Memcached oder Ehcache ansehen.


----------



## Tobse (2. Apr 2014)

64 Datenpunkte pro Millisekunde, sprich 64.000 pro Sekunde? Das wäre dann etwa 1MiB pro Sekunde, sprich 34,34GiB in den 10 Stunden. Da macht das mit dem Arbeitsspeicherüberlauf schon mehr sinn.

Ich würde jetzt vorschlagen dass du mal erfragst was da für ein Prozessor zum einsatz kommt denn bei einer Messfrequenz von 64kHz mit 128bit muss der schon einiges an Power haben (zum Vergleich: Audiohardware stößt bei 96kHz mit 48bit an ihre Grenzen, das entsrpäche 36kHz mit 128bit).
Auch wäre dann interessant was für eine Festplatte die Daten halten soll.

Jetzt wäre es nötig zu wissen, wo die Schmerzgrenze bei der Lade-Verzögerung liegt. Es ist Statistisch so, dass es bereits nervt wenn eine Anwendung nach mehr als 100ms noch nicht reagiert hat.

Dann kannst du Anhand der Datenumsatzrate des Prozessors und der Festplatte errechnen, wie viele Daten du in dieser "Schmerzgrenze" laden kannst und dementsprechend die Menge an Daten pro Datei festlegen.
Es wäre natürlich geschikt wenn du bei der Berechnung der Dateigröße mit ein beziehst, dass beim rauszoomen/reinzommen weniger/mehr daten benötigt werden.


----------



## leon_20v (2. Apr 2014)

Vielen Dank für eure Tips, werde ich morgen mal ausrechnen 

Ja 64 pro ms ist der worst-case.


----------



## Natac (3. Apr 2014)

Es gibt auch "Datenbanken" wie HyperSql, die dir den Luxus des Zugriffs per SQL liefern, aber dei Daten dennoch in eine Datei speichern, du also keine Datenbank-Server aufsetzen musst.

Prinzipiell frage ich mich, was denn genau der "Overhead" einer Datenbank sein soll? Der parallele Betrieb des DB-Servers auf dem selben Rechner? Gefürchteter RAM-Verbrauch durch diesen? Oder sind Datenbanken einfach prinzipiell unbekannt und daher nicht gewünscht, weil man das Gefühl hat, man holt sich damit irgendein Monster ins Haus?
Vielleicht solltest du dir auch mal erklären lassen, was unter Datenbank verstanden wird? Denn wenn ich bspw. HSql nutze, dann nennt sich das Ding auch "Datenbank", obwohl es nur eine Lib zum Einbinden ist und kein DB-Server läuft. 

Prinzipiell würde ich dir schon aus folgenden abraten eine eigene Speichermechanik zu entwickeln: Fehleranfälligkeit. Nimmst du eine existierende Lösung, so kannst du dir ziemlich sicher sein, dass alle Fehler die man beim Schreiben und Einlesen von Dateien so machen kann bereits behoben sind. 
Baust du dir jedoch eine eigene Lösung, wirst du dabei garantiert Fehler machen, die dich Zeit kosten werden.

Nur so als Denkanstoß.


----------



## rme (3. Apr 2014)

Für sowas würde ich persönlich auf keinen Fall eine Datenbank verwenden, du brauchst insbesondere ja keine Relationen, keine Suche und keinen Index. Solange da kein Cluster aus mehreren Computern hinter steckt, ist eine Datenbank in diesem Fall nur unnötiger Overhead, ohne dass du tatsächliche Vorteile erlebst.

Zwei andere Lösungsvarianten:

* Memory-Mapped I/O: Das verbraucht aus Sicht deines Prozesses gar keinen Speicher - man lässt sich vom Betriebssystem die Datei virtuell in den Adressbereich des Prozesses abbilden; das Betriebssystem kümmert sich dann selbst um Sachen wie Caching usw. Auf diese Weise gehen übrigens Datenbanksysteme damit um, dass deren Datendateien größer als der Arbeitsspeicher sind. Man kann auf diese Weise problemlos eine 100 GB große Datei wie ein Byte-Array oder mit beliebigen Java-Streams behandeln. Implementierung wird beispielsweise hier gezeigt: Why use Memory Mapped File or MapppedByteBuffer in Java


* RRD: RRDtool ? Wikipedia


----------



## leon_20v (3. Apr 2014)

rme hat gesagt.:


> Für sowas würde ich persönlich auf keinen Fall eine Datenbank verwenden, du brauchst insbesondere ja keine Relationen, keine Suche und keinen Index. Solange da kein Cluster aus mehreren Computern hinter steckt, ist eine Datenbank in diesem Fall nur unnötiger Overhead, ohne dass du tatsächliche Vorteile erlebst.
> 
> Zwei andere Lösungsvarianten:
> 
> ...




Vielen Dank für deine Antwort, so etwas habe ich gesucht :applaus: :applaus:

Echt schwierig, ich hab noch nie was mit Java am Hut gehabt und jetzt muss ich mir mit so nem riesen Projekt rumschlagen. ^^
Am schlimmsten sind die 100000 Listeners.


----------



## Tobse (3. Apr 2014)

leon_20v hat gesagt.:


> Echt schwierig, ich hab noch nie was mit Java am Hut gehabt und jetzt muss ich mir mit so nem riesen Projekt rumschlagen. ^^


Das ist echt nicht gerade fair... aber da kannst du dich bei deinem Prof für bedanken 



leon_20v hat gesagt.:


> Am schlimmsten sind die 100000 Listeners.


Was daran schlimm sein soll versteh ich nicht ganz. Eine Klasse, 100000 Instanzen und ein 
	
	
	
	





```
synchronized
```
 hält alles zusammen.


----------



## leon_20v (3. Apr 2014)

Hmm, das liegt ned am Prof, ich schreib ja in der Arbeit BA. 

Ja ich hab bisher nur mfc und ein bisschen .net Programmiert. Da hab ich mal ein Delegate gebraucht und das hat mir gereicht. ^^


Jetzt häng ich grad an so nem blöden Tablemodel. ^^

Hab dem ein ListSelectionEvent hinzugefügt. Jetzt kann ich zumindest reagieren wenn ich die Rowselection mit der Maus ändere.

Was ich irgendwie nicht hinbekomme ist, wenn ich die Maus ausserhalb von der Table setze, dass der mir die Selection dann abwählt. Desweiteren brauch ich die Information wenn ich in die erste Spalte klicke. Da soll er eigentlich garnicht die andere Zeile markieren. Ohje... ^^
Vll habt ihr ja ein paar Java-Cracks ein paar Tips dazu auch wenns Offtopic ist. :toll:


----------



## Tobse (3. Apr 2014)

Maus ausserhalb der Tabelle: [JAPI]FocusListener[/JAPI]
Dein Zweites anliegen versteh ich nicht so ganz...


----------



## leon_20v (3. Apr 2014)

ich mach ja grad bissl try and error weil ich mit java keine erfahrung habe.

Focuslistener hab ich schon getestet. Den Focus verliere ich nur, wenn ich ein anderes Control anwähle. Das möchte ich nicht.


----------



## Chloroplast (3. Apr 2014)

der MouseListener hat soweit ich weiß ein mouseExited teil... vllt meinst du das ja


----------



## leon_20v (4. Apr 2014)

hmm ne auch nicht, ich mach einfach nen button der alle zeileneinträge deselectiert und ich hab meine ruhe


----------



## Chloroplast (4. Apr 2014)

also wenn du willst das dir gemeldet wird, wenn der anwender mit seiner maus aus deiner tabelle herausgeht, dann bist du mit dem MouseListener eigentlich ganz gut beraten


----------



## leon_20v (7. Apr 2014)

Vielen Dank für eure Ratschläge, ich hab mir jetzt ne Checkbox gemacht mit der ich anwählen kann, ob man die Rows selectieren kann, bzw. ob beim Selectieren was passiert. Beim Deselectieren der Checkbox wird gleich die Tabelle deselectiert und die nötigen Schritte ausgeführt.


Ich bin mir noch unschlüssig wie ich das mit den Column breiten dynamisch machen soll. Die Benutzer sollen auf wunsch die einzelnen Coloums ausblenden können und die Größe bestimmen. Größe kann ich ja mit der Maus machen, aber Ausblenden? da Brauch ich ja n haufen Buttons oder sonst was zum Einblenden?!?


----------



## Natac (7. Apr 2014)

leon_20v hat gesagt.:


> Ich bin mir noch unschlüssig wie ich das mit den Column breiten dynamisch machen soll. Die Benutzer sollen auf wunsch die einzelnen Coloums ausblenden können und die Größe bestimmen. Größe kann ich ja mit der Maus machen, aber Ausblenden? da Brauch ich ja n haufen Buttons oder sonst was zum Einblenden?!?


Du könntest einen MouseListener an der Tabelle registrieren und ein Context-Menü aufploppen lassen, wenn man mit der Maus über dem Tabellenkopf ist und einen Links-Klick macht.


----------



## leon_20v (7. Apr 2014)

das keine schlechte idee, ich frag mich grad ob ich das selber mache oder mit JPopupMenü.. hmm..

kann man in so nem JPopupMenü auch vor den Einträgen ein Häkchen machen wenn es gerade angezeigt wird?


----------



## leon_20v (9. Apr 2014)

Vielen Dank für eure Hilfe bisher.

Ich bin jetzt grad am überlegen wie ich die Daten am besten auf die Festplatte bekomme.

Das Problem ist ich hab aktuell eine Hashtabelle.

Diese Hashtabelle muss ich jetzt irgendwie auf die Platte bekommen und das ganze auch noch performant.

Ich hab mir überlegt ich Teile die Daten in Segmente auf und Merke mir im Speicher den Anfangspunkt. Wenn ich dann einen Punkt will, kann ich dann in der Tabelle nachsehen in welchem Segment der Punkt liegt und kann dieses Segment dann in Speicher laden und dann die Punkte holen.

Ich weiß nicht ob das so Sinn macht und wie ich das umsetzen soll... eijeijei das ist ganz schön schwierig.


----------

