Dateigestützte Collection für große Datenmengen

ralfz

Aktives Mitglied
Hallo,

ich versuche gerade eine art Container für große Datenmengen zu erstellen und dabei auf relationale Datenbanken zu verzichten. Die Datenstruktur ist vereinfacht als List<List> bzw. List<DataRow> zu verstehen, wobei diese weder in der Anzahl der Spalten noch der Zeilen festgelegt, bzw. beschränkt ist. Da die Datenmenge sehr groß (größer als der RAM) werden kann, müssen die Daten gesplittet werden ( Pages=Chunks !?).

Jede DataRow hat einen key (externer identifier) und vermutlich am Besten auch eine ID, sowie die Daten (Spaltenwerte) in einer Liste.

Der Hauptfokus liegt hierbei auf dem Einfügen, dem Suchen und dem Durchlauf durch die Daten. Updates sind erst einmal unwichtig.

Überlegungen:
a) Implementierung des Collection-Interface
b) Iterationsmöglichkeit
c) Backend für die Chunks als Serialized-Files oder in Objekdatenbank db4o.
d) Gleichzeitig interessiert mich die Performance im Vergleich zwischen Serialisierung und der Objektdatenbank beim Speichern, Suchen, Durchlaufen; Ich möchte die Geschwindigkeit optimieren, daher würde ich auf das Trove-Paket zurückgreifen
e) Trennung von Daten und Index -> B+ Baum

Fragen:
1) Das Collection-Interface greift auf int als Indexwerte zurück. Wenn ich aber von "großen" Mengen spreche, wäre dann nicht long besser? long macht aber viele Probleme.
2) Der Index wird bei long-Werten irgendwann auch zu groß für den Speicher. Wie kann ich den aufteilen bzw. möglichst klein halten?
3) Bisher bin ich davon ausgegangen, dass ich die keys als Indexschlüssel in dem B-Baum verwalte, der dann auf den jeweiligen Chunk bzw. die DataRow in dem Chunk verweist.
3a) Wie gehe ich denn mit evtl. doppelten Einträgen vor? Im prinzip müsste der User die keys vergeben.
3b) Nehme ich aber key und id, dann ist die Frage wie ich die ID vergebe: ID=key? und was mache ich bei belegter ID?
3c) Sollte ich doppelte Schlüssel erlauben? Gäbe das nicht ziemliche Probleme beim suchen bzw. balancieren des Baums!?
4) Wenn der Benutzer für den key einer DataRow andere Werte als int oder long nutzen möchte, müsste ich vermutlich auf String als allgemeinen Typ zurückgreifen. Wie aber nutze ich den als Index? Bzw. wenn ich eine interne ID mit long oder int benutze, wie vergebe ich dann die id? (so eine Art Auto-Increment?). Wie finde ich dann Daten per key, ohne die ganze Datenbank zu durchlaufen? Brauche ich dann noch einen weiteren kompletten Index?
5) Macht es Sinn mehrere Chunks im Speicher zu halten? So eine Art Last-Used-Liste, um zu verhindern, dass immer wieder Chunks gespeichert/geladen werden müssen, die gerader erst gebraucht wurden.
6) Wie erstelle ich einen Iterator für die Collection? Wie verhindere ich, dass dabei zu inkonsistenzen bei Chunks kommt?

So, dass wären die Hauptfragen...
Ich habe schon erste Interfaces deklariert und einige Methoden, aber das wird recht groß, daher verzichte ich hier erst einmal auf das posten.

Hoffe Ihr könnt mir ein wenig helfen...

Gruß
Ralf
 

XHelp

Top Contributor
Ich denke nicht, dass dein Vorhaben sinnvoll ist. Aus welchem Grund willst du auf Datenbanken verzichten? Ich denke nicht, dass du dir DBMS aus dem Ärmel schütteln kannst.

Bei großen Datenmengen wirst du dich extrem ausbremsen. Liste musst du ja durchlaufen um einen Eintrag zu finden. Und zwar auch die ausgelagerten Teile.
Und deine Fragen lassen sich nicht alle beantworten, z.B.:
Wie gehe ich denn mit evtl. doppelten Einträgen vor?
Das kommt doch drauf an was du machst.
Nehme ich aber key und id, dann ist die Frage wie ich die ID vergebe: ID=key? und was mache ich bei belegter ID?
Ähnliche Geschichte... und was ist bei die "key" und "id"?
Sollte ich doppelte Schlüssel erlauben?
Auch hier musst du es wissen was du damit anstellen willst.
 

Landei

Top Contributor
Eine eigene Implementierung halte ich für vergeudete Arbeit. Warum das Rad nochmal neu erfinden?

Wenn dir die relationalen Datenbanken nicht gefallen, solltest du mal einen Blick auf NoSQL-Datenbanken werfen: NOSQL DATABASES
 

ralfz

Aktives Mitglied
Hallo xhelp,

also wenn ich eine DB wie MySQL nehme, dann hätte ich das Problem, dass ich zu Anfang die Columns festlegen muss.
Bei meinen Daten kann es aber sein, dass eine Zeile nur wenige Daten enthält, die nächste aber sehr viele und dabei auch noch die bestehende Breite erweitert. Desweiteren ist es die Vorgabe des Projektes auf eine relationale DB zu verzichten.

Es sollen große Datenmengen gespeichert werden, daher brauche ich Files. Gewünscht wird eine Realisierung mittels Serialisierung. Ich habe das Problem mit dem Aufwand und der Performance beim Schreiben/Lesen ganzer Chunks auch angesprochen und dabei auf die Möglichkeit einer OODB (hier db4o) hingewiesen. Jetzt soll ich quasi beides implementieren und vergleichen, z.B. mit verschiedenen Chunk-Größen.

Java:
class Container<DataRow> implements Collection{
//... einige essentielle Methoden

  Chunk curChunk;
}

class Chunk{
String id;
List<DataRow> rows;

}

class DataRow{
int id; // oder long ; interne ID = sowas wie ZeilenNr
String key; // vom Benutzer vergebene Kennung

List data;
}

So in etwa

Gruß
Ralf
 
Zuletzt bearbeitet:

ralfz

Aktives Mitglied
@Landei:

Ja, dass es auch anders geht habe ich auch gesehen und bin ebenfalls auf einige NOSQL DBs gestossen und habe mir dabei u.A. db40, versant, couch usw. mal kurz angeschaut. Gerade db4o hat mir sehr gut gefallen.

Beim reinen Schreiben von 10000 Datensätzen (Rows) kommt aber an einfache Serialisierung in ein File nichts von der Geschwindigkeit her heran. Daher die Idee File-Chunks zu nutzen. Natürlich ist klar, dass das Suchen nach einzelnen nicht zusammenhängenden Daten dagegen eine Sau-Performance hat. Das Iterieren wiederum dürfte recht fix sein...

Daher jetzt die Idee einen Index per B+ Baum zu haben und dann entweder auf einen Chunk zu verweisen, der in der db4o liegt oder als File vorliegt.

Gruß
Ralf
 
S

SlaterB

Gast
also wenn ich eine DB wie MySQL nehme, dann hätte ich das Problem, dass ich zu Anfang die Columns festlegen muss.
Bei meinen Daten kann es aber sein, dass eine Zeile nur wenige Daten enthält, die nächste aber sehr viele und dabei auch noch die bestehende Breite erweitert. Desweiteren ist es die Vorgabe des Projektes auf eine relationale DB zu verzichten.
ich weiß nicht ob es anderen Vorgaben widerspricht, aber du könntest eine Tabelle mit nur eine Volltext-Spalte anlegen,
das entspricht dann einer Zeile deiner alternativen Text-Datei,

ab Zeilenebene kannst du wieder selber basteln, nur gesamt hättest du dann weniger Probleme,
um die riesige Menge an Zeilen hin zu GBs würde sich die DB kümmern, Indexzugriff auf eine Zeile oder noch besser Laden eines Invervalls von 1000 Zeilen ginge perfekt,

Volltextsuche wird auch einigermaßen unterstützt, jedenfalls schneller als was man selber mit sequentiellen Durchlauf einer Datei hinbekommen könnte,
Map/ Tree ist was anderes, dagegen müssten dann bei DB-Speicherung wohl höhere Tools wie Lucene-Framework arbeiten,
wobei deine internen Maps/ Trees auch praktisch genauso gut mit DB wie mit Datei zusammenarbeiten

edit:
Speichern von neuen Zeilen ist durchaus ein Punkt eher für Datei, richtig
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Rakshan Generic reading of XML document from the root tag into an Collection Allgemeine Java-Themen 0
JavaJüngling beliebige Collection die Comperable Elemente enthält als Parameter Allgemeine Java-Themen 37
W Collections Suche Collection, um Strings mit Indizees versehen Allgemeine Java-Themen 47
I Collection - contains-Methode überschreiben (anonyme innere Klasse) Allgemeine Java-Themen 4
Y String-Collection: längste gemeinsame Strings / Prefixe Allgemeine Java-Themen 3
S Probleme mit Collection Allgemeine Java-Themen 7
S Passende Java Collection Allgemeine Java-Themen 5
D Eigene/r Collection/Container Allgemeine Java-Themen 3
K Collections Collection<> mit List<String> abgleichen? Allgemeine Java-Themen 10
D Beste Collection für Integer Allgemeine Java-Themen 4
H JPA (EclipseLink) Neuer Eintrag in Collection speichern (unidirektional) Allgemeine Java-Themen 3
M Collections Typ Variable einer generischen Collection ? Allgemeine Java-Themen 4
T Garbage Collection Frage Allgemeine Java-Themen 15
H Datentypen Collection für SQL-Datentypen Allgemeine Java-Themen 2
M collection persistence system Allgemeine Java-Themen 4
K associate collection with two open sessions Allgemeine Java-Themen 12
B Garbage Collection Logfile: Binary File Allgemeine Java-Themen 2
T Liste mit GregorianCalendar-Objekten in List einlesen, mit Collection sortieren und ausgeben Allgemeine Java-Themen 3
S Stilfrage bezüglich Beans mit Collection-Properties Allgemeine Java-Themen 2
B iText Portable Collection Acrobat X Allgemeine Java-Themen 2
S Eine Collection von Objekten mit LDAP Syntax filtern Allgemeine Java-Themen 5
Rudolf Aus Collection<Integer> eine Zahl machen Allgemeine Java-Themen 2
hdi Garbage Collection Allgemeine Java-Themen 12
P Collection Tree Allgemeine Java-Themen 19
C Die schnellste Collection-Klasse ? Allgemeine Java-Themen 37
K Collection.contains()/retainAll() mit Referenzgleichheit statt equals()? Allgemeine Java-Themen 2
W return Collection mit schleife durchsuchen Allgemeine Java-Themen 10
E Collection Problem Allgemeine Java-Themen 2
B Geordnete, begrenzte Collection Allgemeine Java-Themen 3
D [SOLVED] Collection wird nicht richtig per Konstruktor übernommen Allgemeine Java-Themen 8
S Wahl der Collection, unspezifizierte Elementtypen Allgemeine Java-Themen 4
D Map mit Collection Eigenschaften Allgemeine Java-Themen 9
T Objekt der Garbage Collection zugaenglich machen? Allgemeine Java-Themen 7
S Innerer Type einer generischen Collection herausfinden? Allgemeine Java-Themen 13
B SBCC - Swing Better Components Collection - downloadlink ? Allgemeine Java-Themen 5
G Schnelligkeit einer Collection Allgemeine Java-Themen 12
V Collection in Collection Allgemeine Java-Themen 3
W [solved] Vector sortieren (Collection / Comparable?) Allgemeine Java-Themen 7
M Collection aufteilen Allgemeine Java-Themen 4
S Collection Type Allgemeine Java-Themen 8
S Probleme mit collection.containsAll Allgemeine Java-Themen 28
F Frage zu Memory Leak, Garbage Collection und Profiler-Tools Allgemeine Java-Themen 6
C Collection Multithreading? Allgemeine Java-Themen 33
vogella Überschreiben von equals und hashcode für Collection Allgemeine Java-Themen 7
T Hibernate Criteria Queries - Abfragen von Collection-Members Allgemeine Java-Themen 2
M Schnellste Collection/Liste Allgemeine Java-Themen 15
M Collection mit ArrayList Allgemeine Java-Themen 17
F mittels Collection<A> an A.class kommen? Allgemeine Java-Themen 7
L Welche Collection ist die richtige ? Listen mergen Allgemeine Java-Themen 3
B Collection Allgemeine Java-Themen 2
M Wie lange dauert ein garbage collection Allgemeine Java-Themen 7
R Garbage Collection bei gegenseitiger Objektreferenz Allgemeine Java-Themen 2
N Collection#retainAll(Collection<?> c) Allgemeine Java-Themen 3
M garbage collection Allgemeine Java-Themen 14
G Frage zur Garbage Collection Allgemeine Java-Themen 5
R Objekttyp ermitteln das aus generischer Collection kommt Allgemeine Java-Themen 3
J Von Collection zu vector Allgemeine Java-Themen 5
P Welche Collection verwenden? Allgemeine Java-Themen 4
S Sortierung einer Collection nach dem Attribut "name&quo Allgemeine Java-Themen 3
C Collection Element ersetzen Allgemeine Java-Themen 5
C public boolean containsAll(Collection c) Allgemeine Java-Themen 2
C Collection, LinkedList, Elemente Allgemeine Java-Themen 4
B Algorithmus für Arbeit mit fehlenden Listenelementen? Allgemeine Java-Themen 1
kodela Eingabe für TextArray bedingt sperren Allgemeine Java-Themen 3
Karl_Der_Nette_Anfänger Hat wer ne Lösung für verknüpfte Postleitzahlen? (Baum/Wurzel Struktur) Allgemeine Java-Themen 11
R 11 GB File lesen ohne zu extrahieren Filedaten Bereich für Bereich adressieren dann mit Multi-Thread id die DB importieren Allgemeine Java-Themen 3
G KeyListener für JTextField Allgemeine Java-Themen 5
webracer999 Library für Textsuche (z. B. include/exclude, and/or)? Allgemeine Java-Themen 5
I Module-Info für Jar erzeugen Allgemeine Java-Themen 7
krgewb Java-Bibliothek für ONVIF Allgemeine Java-Themen 1
B Simpler Eventlistener für Tastaturtaste bauen? Allgemeine Java-Themen 13
_user_q Eingegebenen Text Zeile für Zeile ausgeben lassen Allgemeine Java-Themen 11
E Key für TOTP Algorythmus(Google Authentificator) Allgemeine Java-Themen 0
S Formel für Sonnenwinkel in ein Programm überführen Allgemeine Java-Themen 11
M pfx-Zertifikat in Tomcat für SSL-Verschlüsselung nutzen Allgemeine Java-Themen 14
R Best Practice Erfahrungswerte für eine Migration von JSF nach Angular (oder anderes JS-Framework) Allgemeine Java-Themen 1
B HeapSort für Array of Strings funktioniert nur teilweise Allgemeine Java-Themen 3
jhCDtGVjcZGcfzug Klassen Was genau passiert hier? Kann mir das jemand bitte Zeile für Zeile erklären? Allgemeine Java-Themen 1
rosima26 Bester Sortieralgorithmus für kurze Arrays Allgemeine Java-Themen 40
S Mit Methoden kann man definieren für was <T> steht. Geht das auch irgendwie für Variablen? Allgemeine Java-Themen 12
MangoTango Operatoren while-Schleife für Potenz Allgemeine Java-Themen 3
B Lottospiel, genug Reihen tippen für 3 Richtige (Spaß mit Arrays)? Allgemeine Java-Themen 46
B Mit welchen Datentypen und Strukturierung am Besten dutzende Baccaratspiele Shcritt für Schritt durchsimulieren? Allgemeine Java-Themen 26
D Klassendesign für einen Pascal Interpreter Allgemeine Java-Themen 6
I OCR Library für Belegerkennung Allgemeine Java-Themen 7
farah GetterMathod für Farbkanäle Allgemeine Java-Themen 6
B Welcher Datentyp für sehr große Zahlenbereiche? Allgemeine Java-Themen 1
S Webservices für binäre Daten? Allgemeine Java-Themen 5
G Licence-Header für InHouse entwickelten Source Allgemeine Java-Themen 8
M Schleife für einen TicTacToe Computer Allgemeine Java-Themen 5
O git ignore für Intellji braucht es die .idea Dateien? Allgemeine Java-Themen 8
F Java Script für das Vorhaben das richtige? Allgemeine Java-Themen 9
M wiviel Java muss ich für die Berufswelt können ? Allgemeine Java-Themen 5
Robertop Datumsformat für GB ab Java 16 Allgemeine Java-Themen 1
Thallius Verschiedene entities für gleichen Code…. Allgemeine Java-Themen 8
OnDemand Zentrale "Drehscheibe" für verschiedene APIs Allgemeine Java-Themen 14
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
D SHA-3 für Java-version 1.8 Allgemeine Java-Themen 1
N Validator für einen SQL-Befehl Allgemeine Java-Themen 22

Ähnliche Java Themen

Neue Themen


Oben