Wer kann mir eine Datenbank empfehlen

Tensor

Mitglied
Hi und Hallo,
da ich selbst sehr wenig Erfahrung mit Datenbanken habe, nun aber vor dem Problem stehe, immer grössere Datenmengen sicher speichern zu müssen, würde ich mich über eine Expertenempfehlung wirklich freuen.

Die Aufgabe ist im Grunde recht simpel:
  • ein webclient liefert Daten an den Server, dieser speichert und liefert auf Anfrage wieder aus.
  • die Daten sind baumartig strukturiert, auf der untersten Ebene gibt es eine Hashtable in diese können beliebig weitere Hastables oder Arrays eingetragen sein. Jedes Array oder jede Hashtable kann weitere Hashtables oder Arrays enthalten. Die Schachteltiefe ist nicht begrenzt und am Ende sind die "Blätter" des Datenbaumes stets integer, float, String oder boolean.
  • Zugriffe auf die Daten erfolgen über Pfade. Will etwa ein webclient seine registry laden lautet der Befehl an den server: "load("root;customer;5;webapps;4;dummyuser;system;registry"); woraufhin der Server die entsprechende Hashtable serialisiert und sendet. Und umgekehrt will der webclient einen Eintrag in der Registry aktualisieren lautet der Befehl an den Server etwa: save("root;dummycustomer;....;registry;app_1;default;23", serializedObject);

Wenn jemand glaubt das richtige Datenbanksystem für diese Aufgabe zu kennen würde ich mich wirklich über einen Tipp sehr freuen.

Danke im Voraus
Gernodt
 

Sekundentakt

Bekanntes Mitglied
Hi,

ohne das ich mich näher damit beschäftigt hätte, aber dein dritter Punkt klingt nach einem Fall, wo XML-Datenbanken ganz nützlich sein könnten. Schau Dir konkret mal Berkeley DB an (das ist die einzige XML-Datenbank, die ich kenne - wird von Oracle als Open Source zur Verfügung gestellt) und beließ Dich zusätzlich noch über die Skalierbarkeit - ich glaube aber, die sollte kein Problem darstellen.

Hast Du keine Möglichkeit das Ganze zu normalisieren, sodass RDBMS nicht gänzlich ausscheiden?

Gruß
 
G

Gast2

Gast
Ja, bei der Struktur wirst du mit relationalen DBs keine Freude haben. Da bleiben eigentlich dann nur Alternativen wie Berkeley, xindice, db4o, versant und ähnliches mit all ihren Vor- wie Nachteilen.
 
G

gman

Gast
Hi,

nachdem die relationalen DBs nach einhelliger Meinung schon ausgeschieden sind, guck dir
vielleicht mal deren aktuell heiß gehandelten "Nachfolger" an.

Stichworte: NoSQL, insbesondere GraphDB (wenn ich ehrlich bin hab ich deinen Anwendungs
fall nicht so ganz verstanden :oops: aber letzteres klingt ähnlich abgefahren wie deine
Aufgabenbeschreibung ;) )
 

Tensor

Mitglied
Erst mal Danke für Euere Antworten,
  • RDBMS scheidet tatsächlich aus - obwohl sich die Datenstruktur tatsächlich abbilden liesse, nur die Sache wird derart verzwickt, und meine Fähigkeiten sind hier viel zu beschränkt :oops:
  • db4o interessiert mich, Datenbank und Struktur passen wohl ganz gut zusammen. Ich sehe nur ein grosses Problem: Datenbanken speichern viele kleinere Objekte, hier gibts nur ein einziges und das ist wahrhaft gigantisch.
Meine Frage also an diejenigen mit db4o Erfahrung: kann db4o ein einzges Objekt verwalten, das im Prinzip mehrere hundert GB gross werden kann und dann aus mehreren milliarden Subobjekten besteht???

Alternativ sehe ich die Möglichkeit einer doppelt verlinkten Liste. Jedes Objekt kennt seinen parent, die childs, seinen Typ und den Datenwert - falls es Daten trägt. Zugriffe erfolgen, indem man sich von Objekt zu Objekt hangelt. Aber auch da die Frage: könnte man mit db4o so etwas erledigen??

LG
 
G

Gast2

Gast
Meine Frage also an diejenigen mit db4o Erfahrung: kann db4o ein einzges Objekt verwalten, das im Prinzip mehrere hundert GB gross werden kann und dann aus mehreren milliarden Subobjekten besteht???

Alternativ sehe ich die Möglichkeit einer doppelt verlinkten Liste. Jedes Objekt kennt seinen parent, die childs, seinen Typ und den Datenwert - falls es Daten trägt. Zugriffe erfolgen, indem man sich von Objekt zu Objekt hangelt. Aber auch da die Frage: könnte man mit db4o so etwas erledigen??

LG


Anfürsich verwalten schon. Aber es macht keinen sinn da du nicht weiter drin suchen kannst. Dein zweiter Vorschlag wäre da schon besser. Du queriest ja in db40 nach einem Objekt. Wenn du das dann rausbekommst und dich über die parent und childs weiter navigieren kannst ist das möglich.

Ich würd dann aber auch die Objekte "weich" verlinken über eine ID und nicht mit einer linkedList die refernzen auf Objekte hällt.

Also Sprich in dem Object Ids der parent und childs halten und mir die childs dann aus db40 per query rausholen.
 

homer65

Top Contributor
Sowas läßt sich sehr wohl mit relationalen Datenbanken realisieren.
Mit anderen Datenbanksystemen kenne ich mich leider nicht aus.
Anmerken möchte ich jedoch, das es, wenn die Datenmenge größerer wird, keinen Sinn machte alles als ein Objekt abspeichern, das man nur als ganzes lesen und verändern kann. Wichtig ist, das auslesen und verändern von Teilbereichen ohne großen Aufwand geht.
 

mvitz

Top Contributor
Anfürsich verwalten schon. Aber es macht keinen sinn da du nicht weiter drin suchen kannst. Dein zweiter Vorschlag wäre da schon besser. Du queriest ja in db40 nach einem Objekt. Wenn du das dann rausbekommst und dich über die parent und childs weiter navigieren kannst ist das möglich.

Ich würd dann aber auch die Objekte "weich" verlinken über eine ID und nicht mit einer linkedList die refernzen auf Objekte hällt.

Also Sprich in dem Object Ids der parent und childs halten und mir die childs dann aus db40 per query rausholen.

Das widerspricht dann aber dem Konzept einer Objektorientierten Datenbank, hier sollen ja auch solche Objekte direkt mit gespeichert werden. Idealerweise haben diese Objekte eben auch eine eindeutige Eigenschaft, über die man diese dann zusätzlich laden/suchen/finden kann. So kann man sich direkt ein Root-Element holen und dann machen was man möchte, oder über die Datenbank direkt ein Kind-Element nach einem bestimmten Kriterium finden.
 

Sekundentakt

Bekanntes Mitglied
Sowas läßt sich sehr wohl mit relationalen Datenbanken realisieren.
Mit anderen Datenbanksystemen kenne ich mich leider nicht aus.
Anmerken möchte ich jedoch, das es, wenn die Datenmenge größerer wird, keinen Sinn machte alles als ein Objekt abspeichern, das man nur als ganzes lesen und verändern kann. Wichtig ist, das auslesen und verändern von Teilbereichen ohne großen Aufwand geht.

Das sehe ich genau so.
Könntest Du vielleicht mehr zu Deinem eigentlichen Use-case sagen?
Objekte mit mehreren Gigabyte an notwendigem Speicher - das klingt irgendwie so, als ob man hier noch optimieren könnte.

Fragen, die mir aufkamen, waren: Was befindet sich in den Objekten, dass sie so groß werden können? Eingelesene Dateien? Oder was bläht die so auf?

Die nächste Frage ist: Wonach suchst Du in der Datenbank? Oder anders: Was wären typische Anfrageformen? Suchst Du immer nur ein Objekt X oder suchst Du alle Objekte, mit der EigenschaftY - hier könnte man ggf. noch etwas mehr in Erfahrung bringen.

db4o interessiert mich, Datenbank und Struktur passen wohl ganz gut zusammen. Ich sehe nur ein grosses Problem: Datenbanken speichern viele kleinere Objekte, hier gibts nur ein einziges und das ist wahrhaft gigantisch.
Das klingt irgendwie so, als ob Du die Datenbank als zentrale Speicherstelle verwenden möchtest, um möglichst einfach wieder an die Objekte heranzukommen.
Bei Daten wie z.B. Anschriften, Adressen etc. macht sowas Sinn, aber z.B. Dateien (Bilder, Videos, PDFs,...) werden nur per Referenz in der DB gehalten (z.B. Speicherort/Parameter für Programm, dass den Speicherort kennt oder anhand der Parameter auflösen kann).
Grund hierfür ist, dass ein "normales" Filesystem eher mit solchen Daten umgehen kann als eine Datenbank.

Das sind nur ein paar Gedanken hierzu.

Fakt ist aber, dass Du - falls möglich - mehr über Dein Vorhaben erläutern solltest, damit wir Dir hier konstruktiv weiterhelfen können.

Beste Grüße
 

Tensor

Mitglied
Wie schon eingangs erwähnt sind die Daten im Prinzip nicht tabellen- sondern baumartig.
Der Hintergrund ist der: einerseits habe ich ein System - programmiert in AS3 - das eine Art Betriebssystem innerhalb des Browsers etabliert ... mit allem was man von einem
System halt so erwarten kann - inclusive eines eigenen Interpreters. Andererseits die zugehörige serverseitige Software - JAVA - um die Clients zu kontrollieren und mit Daten zu versorgen bzw. von den Clients versorgt zu werden.

Es ist also nicht immer vorhersehbar welche Datenstrukturen in welchem Zusammenhang anfallen oder künftig anfallen könnten. Das Ganze ähnelt eher der Filestruktur eines Betriebssystems.
Der Datenbaum besteht aus Hashtables und Arrays, die beliebig geschachtelt sind und Zugriffe erfolgen über Pfade.

Die Daten selbst sind stets Strings, ints, floats oder booleans (z.B. sind Bilddaten in der Tat nicht direkt in der Struktur enthalten sondern nur der Verweis).
Die typischen Datenbankanfragen wie: gib mir alle Benutzer, deren Postleitzahl mit "3" beginnt und deren Vorname "Hans" ist, gibt es nicht.

Tatsächlich lauten die Anfragen etwa: gib mir das, was unter dem Pfad: "root;system;filesystem;desktop;folder_1" abgespeichert ist - was immer das auch sein mag.
Andererseits lauten Kommandos an den Server etwa: lösche "root;system;filesystem;desktop;folder_1;7". Was das Arrayelement "7" im folder_1 entfernen soll -
und dabei natürlich alle nachfolgenden Arrayelemente oberhalb von 7 umnumerieren muss.
In Hashtables können neue keys angelegt und hierunter neue Kombinationen von Hashtables und Array abgelegt werden.
Hashtablekeys können gelöscht, neue Arrayelemente angefügt oder an beliebiger Stelle eingefügt werden etc. etc.

Lauter Aufgaben, die nicht typisch für eine Datenbank - sondern eher für ein Filesystem - sind.???:L
 

ice-breaker

Top Contributor
Tensor, irgendwie ist der Großteil deines Postings fachlich einfach komplett falsch.

Datenbanken als auch Betriebssysteme - du meinst wohl Dateisysteme - setzen auf Bäume: B-Bäume, (B+)-Bäume und weitere.

Und natürlich gibt es diese Kriterien-Anfragen, diese werden auf Bäumen ausgeführt, die Index-Daten. Wurden dort passende Datensätze gefunden, werde diese aus einer großen Datei von der Festplatte geladen anhand des Offsets, den der Index angegeben hat.

Also mit Hashtables und Arrays wird da rein gar nichts gemacht, es seidenn man würde in einer Datenbank einen Hash-Index anlegen, aber das ist eine andere Geschichte.
 

Sekundentakt

Bekanntes Mitglied
Dinge die mir hier auf Anhieb einfallen, sind Nested Sets.
Schau Dir dazu mal den Artikel auf phpperformance.de an:Nested Sets
Nimm Dir dafür aber Zeit, sonst verstehst Du die Theorie dahinter nicht.
Falls Du dich fragst, wie das SQL-Statement dort stimmen kann, besorg Dir am besten Zettel und Stift und rechne nach - als ich das damals tat, hat's auch Klick gemacht ;-).

Nested Sets sind hervorragend dazu geeignet, baumartige Strukturen in nur wenigen Spalten abzubilden.
Lediglich das verändern der Struktur (z.B. den ersten Ast von X auf einmal zum ersten Ast von Y zu machen etc.) ist etwas aufwändiger. Hier müsstest Du dich etwas näher belesen.

Btw.: Willst Du auf ein echtes Dateisystem zugreifen und brauchst dafür die entsprechenden Pfade?
Soweit ich weiß, gibt es auch virtuelle Dateisysteme. Vielleicht helfen die Dir ja auch weiter.
 
G

Gelöschtes Mitglied 5909

Gast
Auch wenn ich das noch nicht benutzt habe, denke ich dass dir Welcome to Apache Jackrabbit helfen könnte.

Ist übrigens eine JSR implementierung :)

Schau da mal nach: First Hops

Java:
import javax.jcr.Repository;
import javax.jcr.Session;
import javax.jcr.SimpleCredentials;
import javax.jcr.Node;
import org.apache.jackrabbit.core.TransientRepository;

/**
 * Second hop example. Stores, retrieves, and removes example content.
 */
public class SecondHop {

    /**
     * The main entry point of the example application.
     *
     * @param args command line arguments (ignored)
     * @throws Exception if an error occurs
     */
    public static void main(String[] args) throws Exception {
        Repository repository = new TransientRepository();
        Session session = repository.login(
                new SimpleCredentials("username", "password".toCharArray()));
        try {
            Node root = session.getRootNode();

            // Store content
            Node hello = root.addNode("hello");
            Node world = hello.addNode("world");
            world.setProperty("message", "Hello, World!");
            session.save();

            // Retrieve content
            Node node = root.getNode("hello/world");
            System.out.println(node.getPath());
            System.out.println(node.getProperty("message").getString());

            // Remove content
            root.getNode("hello").remove();
            session.save();
        } finally {
            session.logout();
        }
    }

}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I SaaS Applikation: pro Kunde eine Datenbank / Schema oder eine DB für alle Kunden? Datenbankprogrammierung 76
Avalon Attribute werden mit Unterstrich in eine MySQL Datenbank eingetragen Datenbankprogrammierung 10
C Datenbank anlegen und über eine Website mit Daten füllen? Datenbankprogrammierung 25
Dimax MySQL Maximale Datenlänge für eine Spalte einer Datenbank in java ermitteln Datenbankprogrammierung 15
P Daten in eine mySQL Datenbank einfügen Datenbankprogrammierung 4
N Wie in Java Zugriffe und Updates auf eine Datenbank regeln ? Datenbankprogrammierung 1
H Grosse Menge an Daten in eine Datenbank Datenbankprogrammierung 32
P MySQL eine richtige Datenbank für einen routenplaner erstellen Datenbankprogrammierung 2
K SQLite CSV-Datei einlesen in eine Datenbank Datenbankprogrammierung 7
E Datenbank Abfragen in eine GUI schreiben Datenbankprogrammierung 8
A Problem mit Eintragen von Daten in eine Datenbank mittels DAO Datenbankprogrammierung 4
H Derby/JavaDB Eine verschlüsselte Derby-Datenbank wieder entschlüsseln Datenbankprogrammierung 4
I Zugriff auf eine Datenbank auf dem Webserver Datenbankprogrammierung 2
H Derby/JavaDB SQLException wenn die Datenbank in eine Jar gepackt wurde. Datenbankprogrammierung 6
S Werte aus Datenbank auslesen und in eine bestimmte Excelzelle eintragen Datenbankprogrammierung 2
D MySQL Wie schreibe ich in eine Datenbank? Datenbankprogrammierung 8
Q Access Datenbank in eine Internetseite einbinden Datenbankprogrammierung 2
M Zugriff auf eine Access-Datenbank innerhalb eines jar-Files Datenbankprogrammierung 7
T eine Datenbank updaten Datenbankprogrammierung 6
E Wie auf eine MySql Datenbank zugreifen Datenbankprogrammierung 25
D Werte mit java programm in eine Datenbank einlesen Datenbankprogrammierung 7
H Wie kann ich eine Datenbank Connection aus XML-Datei lesen! Datenbankprogrammierung 2
M Tabelle von einer Datenbank in eine Andere Datenbankprogrammierung 4
A Einlesen einer csv-Datei in eine H2-Datenbank Datenbankprogrammierung 3
M Mit Java .txt-Datei in eine Datenbank einlesen lassen Datenbankprogrammierung 33
M GUI für eine Datenbank Datenbankprogrammierung 2
S Problem bei Eingabe von Dateipfad in eine MySQL-Datenbank Datenbankprogrammierung 4
E SQL-Statement um eine Nummer in der Datenbank zu suchen Datenbankprogrammierung 3
B Wie kann ich eine Jtable mit Inhalt einer SQL Abfrage füllen Datenbankprogrammierung 14
Zrebna PostgreSQL-Query in eine MicrosoftSQL-Query konvertieren - chatGPT hilft nur bedingt. Datenbankprogrammierung 3
T Spring MongoDB: Prüfen ob bereits eine Email existiert Datenbankprogrammierung 15
Zrebna Wie mittels Hibernate eine Join-Tabelle als eigene Java-Klasse erstellen? Datenbankprogrammierung 5
Zrebna Probleme bei Überführung von SQL-Code in eine HQL-Abfrage Datenbankprogrammierung 3
Zrebna Wie mittels PL/SQL eine Datenbankverbindung blockieren? Datenbankprogrammierung 6
berserkerdq2 Was genau muss ich bei date eingeben, wenn ich in Java eine Spalte definiere, die date ist? Datenbankprogrammierung 1
pkm PostgreSQL Kann mit mybatis einen Parameter für eine postgreSQL-Abfrage nicht übergeben. Datenbankprogrammierung 5
Kirby.exe Eine Tabelle updaten Datenbankprogrammierung 16
B Wie kopieren ich eine Spalte von einer Tabelle in eine andere Tabelle SQLite durch java code? Datenbankprogrammierung 26
Z Aus zwei bestehenden Table eine zusätzliche Gemeinsame machen (JavaFX) Datenbankprogrammierung 21
pkm PostgreSQL Auf eine Spalte kann aus einem Teil der SQL-Aussage nicht zugegriffen werden Datenbankprogrammierung 3
F Mapping einer SQL Abfrage in eine Klasse Datenbankprogrammierung 4
H suche eine Login system Bibliothek für Java Datenbankprogrammierung 5
G Eine Spalte in xampp als Typ array erstellen - ein array mit "insert" hinzufügen. Datenbankprogrammierung 3
F Create Table - Habe ich eine schwache Entität erzeugt ? Datenbankprogrammierung 4
Dimax MySQL Trigger für eine Spalte Datenbankprogrammierung 5
D MySQL Eibinden des "mysql-connector" in eine fertige Jar Datenbankprogrammierung 3
P JSP - Daten aus 2 Tabellen in eine neue Tabelle einfügen Datenbankprogrammierung 1
S MySQL JTable zeigt nach Datenbankabfrage eine Spalte zu viel an Datenbankprogrammierung 0
Thallius MySQL Tabelle splitten aber wie eine abfragen? Datenbankprogrammierung 10
B MySQL Eine Art Sverweis Datenbankprogrammierung 27
O HSQLDB Eine Entität, mehrere Tabellen Datenbankprogrammierung 8
B SQL-Statement Prüfen ob eine Spalte einen Wert enthält Datenbankprogrammierung 2
X SQLite Erhalte bei Query INSERT INTO eine NullPointerException Datenbankprogrammierung 10
L0MiN Wie kann ich eine bestimmte Seite aus verschiedenen Excel-Tabellen in eine neue Exceldatei kopieren? Datenbankprogrammierung 1
E Wie kann ich aus diesem XML eine XMLTABLE-Funktion bauen? Datenbankprogrammierung 3
E Wie kann man mit einer ID-Spalte über eine Parameterübergabe auf eine Seite verweisen? Datenbankprogrammierung 17
A Eine MySQL Zeile mit JDBC löschen Datenbankprogrammierung 5
M Warum ist es suboptimal viele Indexe auf eine Datenbanktabelle zu setzen? Datenbankprogrammierung 4
L Datenmodell erstellen für eine Nutzertanalyse Datenbankprogrammierung 1
serjoscha MySQL Eine Instanz von eigenem DBWrapper -> Fehler durch mehrfachbenutzung möglich? Datenbankprogrammierung 2
S HSQLDB Verbieten eines update auf eine bestimmte reihe Datenbankprogrammierung 4
V HSQLDB Insert in eine Tabelle mit Autoincrement Datenbankprogrammierung 2
D SQL Update auf eine Query möglich? Datenbankprogrammierung 4
S SqlObject - eine objektorientierte Art SQL-Statements zu schreiben. Datenbankprogrammierung 4
C Mit jsp über Java eine DB Abfrage durchführen --> java.lang.ClassNotFoundException Datenbankprogrammierung 4
L MySQL MySql in eine Application einbinden? Datenbankprogrammierung 18
R MySQL Voraussetzungen für eine erfolgreiche Datenbankanbindung mittels JDBC Datenbankprogrammierung 2
D Was passiert bei absolut zeitgleichem Zugriff auf eine Tablerow Datenbankprogrammierung 7
I Belastet es das System zu sehr einen Timer jede 0.2 Sekunden eine DB Abfrage machen zu lassen? Datenbankprogrammierung 9
F H2:Wie kann man insert eine Reihe "int" wert als blob in table? Datenbankprogrammierung 12
J mal wieder eine Frage zu parallelen Transaktionen.. Datenbankprogrammierung 2
Screen Ich suche eine SQLDatenbank ohne JDBC-Treiber Datenbankprogrammierung 12
turmaline [Hibernate] @OneToMany - Eine referenzierte Tabelle abfragen Datenbankprogrammierung 11
DStrohma MS SQL Server 2005 + Java: Immer nur eine aktive Verbindung erlaubt? Datenbankprogrammierung 5
J String[] in eine SQL-Anweisung implementieren Datenbankprogrammierung 13
J Über einen Button eine SQL-DB aussuchen Datenbankprogrammierung 3
O eine Tabelle hat mehrere PrimKey mit dem selben Wert Datenbankprogrammierung 9
R Connection Problem für eine externe DB mit Java (JDBC) Datenbankprogrammierung 9
N Wie kann ich Zugriff auf eine MS Access DB (mit JDBC) über Netzwerk erreichen? Datenbankprogrammierung 7
G Wie sieht eine Datenbankverbindung mit jndi aus? Datenbankprogrammierung 3
C Prüfen, ob eine MySQL-Tabelle bereits existiert Datenbankprogrammierung 7
T JPQL Query für eine Tabellenansicht Datenbankprogrammierung 2
B Wie persistiert man eine Tree-ähnliche Datenbankstruktur? Datenbankprogrammierung 2
M Aus einem Applet eine Datenbankverbindung starten? Datenbankprogrammierung 26
R Datenbankstruktur für eine renn simulation Datenbankprogrammierung 3
G Wie baut man eine Anwendung mit DB Zugriff Datenbankprogrammierung 3
S Als Rückgebewert eine Liste von Werten? Datenbankprogrammierung 3
A Auslesen von Werten aus der DB in eine csv-Datei Datenbankprogrammierung 4
O Oracle 11g wirft bei 90 % der installation eine Exception ? Datenbankprogrammierung 5
T Recordsets in eine JTable einlesen mit Netbeans 6.0 Datenbankprogrammierung 2
R Warum kommt eine Exception bei instanceof ? Datenbankprogrammierung 4
G Inhalt eine Clob Feldes zw. zwei DB's kopieren Datenbankprogrammierung 2
A Kriterium für eine JList neu definieren Datenbankprogrammierung 3
A Probleme beim Schreiben in eine CSV-Datei aus einer H2-DB Datenbankprogrammierung 2
G Import einer csv-Datei in eine H2-Database Datenbankprogrammierung 12
J Warum ist es aufwendig eine Datenbankverbindung herzustellen Datenbankprogrammierung 3
S Zugriff auf eine große Datenmenge von MS Access per JDBC Datenbankprogrammierung 11
S von einer DB auf eine andere Zugreifen. Datenbankprogrammierung 2
W Wann ist eine Telefonnummer atomar ? Datenbankprogrammierung 3
D Dateien in eine OODB abspeichern Datenbankprogrammierung 3

Ähnliche Java Themen


Oben