Verschiedene Persistenz Strategien

Status
Nicht offen für weitere Antworten.

Dandro

Mitglied
Hallo nochmal ;)

Ich möchte erstmal anmerken, dass ich mir mit der Wahl des Forums nicht wirklich sicher war, also entschuldigt, wenn ich das falsche Forum gewählt haben sollte.

Ich versuche im Moment eine Persistenz Engine für eines meiner Projekte zu konzipieren. Die Anforderungen wären, dass die Persistenz über verschiedene Layer möglich sein soll. Dass heißt es soll beispielweise die Möglichkeit einer
MySQL Datenbankanbindung geben, allerdings auch, sofern gewünscht, eine einfache Sicherung in Dateien. Mehr bräuchte ich für den Anfang auch nicht, später würde evtl. ein XML Layer dazukommen, aber das ist jetzt nicht so wichtig.

Die Datenbank Anbindung würde ich mit Hibernate realisieren, weil es zum Schluss doch verschiedene und komplexe Objekte werden, also strebe ich eine Umsetzung mit Objektrelationalem Mapping an. Falls es vielleicht dafür eine bessere Lösung gibt, immer her damit ;)

Die Umsetzung der File-Variante bereitet mir allerdings Probleme. Das Programm wird letztlich eine große Datenbasis zur Verfügung haben, weshalb es wenig performant sein wird ALLE Datenfiles einzulesen und als Objekte im RAM zu lassen, oder irre ich mich da? Eine andere Möglichkeit sehe ich allerdings im Moment nicht um beispielweise ein bestimmtes Objekt zu laden. Mir kam da eine Art "Map" in den Sinn, die die Objekte und deren Position in einer File beschreibt. Allerdings wären die Möglichkeiten damit sehr beschränkt. Und ich könnte ein Objekt nur nach einem Kriterium heraussuchen (oder auch zwei, je nachdem wieviele Sinn machen). Nicht aber so wie bei SQL "Select * FROM table WHERE [....]", was ich letztendlich aber auch gerne für das Filesystem erreichen wollen würde.

Gibt es schon gute Strategien in der Kategorie oder ein Konzept der Umsetzung eines solchen Systems?

PS.: Ich hoffe es wurde klar, wo mein Problem liegt XD
 

foobar

Top Contributor
Warum willst du überhaupt Files als Persistenzlayer verwenden? DB + Hibernate ist doch völlig OK. Wenn du dann noch den DB-Code mit Hilfe des DAO-Patterns kappselst, biste auf der sicheren Seite.
 
G

Guest

Gast
Hier ein Vorschlag für die Struktur der DAO-Schicht.
Code:
public interface GenericDAOIF<T>
{
   List<T> readAll() throws DAOException;
   T create(T dao) throws DAOException;
   T read(Long id) throws DAOException;
   T update(T dao) throws DAOException;
   void delete(T dao) throws DAOException;
}

public interface PersonDAOIF extends GenericDAOIF<Person>
{
   ... spezielle DAO Methoden zum Lesen von Person
}

class JPAPersonDAO implements PersonDAOIF
{
   ... DAO Implementierung mit JPA bzw. Hibernate
}

class JDBCPersonDAO implements PersonDAOIF
{
   ... DAO Implementierung mit JDBC
}

class FilePersonDAO implements PersonDAOIF
{
   ... DAO Implementierung mit Dateien
}

public class PersonDAOFactory
{
   private PersonDAOFactory() {}

   public static PersonDAOIF createPersonDAO() throws DAOException
   {
      switch(Configuration.getDAOImplementation())
      {
         case DAOImplementation.JPA:
            return new JPAPersonDAO();
         case DAOImplementation.JDBC:
            return new JDBCPersonDAO();
         case DAOImplementation.FILE:
            return new FilePersonDAO();
         default:
            throw new DAOException(String.format("Unsupported DAO Implementation: %s", Configuration.getDAOImplementation()));
      }
   }
}
 

kleiner_held

Top Contributor
Ich wuerde auch eine reine Datenbank+Hibernate Lösung empfehlen. Für Installationen bei denen keine externe DB gewünscht ist, kannst du dann eine HSQL-DB einfach mit in dein Programm einbauen, die würde dann beim Programmstart implizit mit gestartet und die Daten werden im Endeffekt auch nur in Dateien gespeichert.
 

deleted

Bekanntes Mitglied
Also "SELECT" im Dateisystem.
Microsoft hat es versucht. Microsoft ist kläglich gescheitert ;)

Ansonsten klar:
Du kannst z.B. HashMaps nutzen, die auf Dateien verweisen.
z.B. hast du einen Vektor, welcher alle bereits geladenen Objekte hat.
Auf alle ungeladenen zeigen HashMaps.

wenn du dann deinem eigenen SQL Objekt den String
"SELECT KUNDENOBJEKT FROM KUNDE WHERE NAME = X" übergibst, musst du den nur:
- mit einem Automaten auf Syntaxkorrektheit prüfen
- mit StringTokenizer zerlegen
- deine gewünschten Operationen ausführen.

z.B. verweist dann die HashMap "KundenNamen" mit jeweils dem Namen auf ein Fileobjekt, in dem das serialisierte Kundenobjekt liegt.

Ist dieses noch nicht im Vektor, wird es in den RAM geladen.

Mein persönlicher Kommentar zu sowas:
Ich hoffe du hast nen AKW neben der Haustür...

Die sinnvollste Lösung ist, du nimmst eine ordentliche Datenbank ;)
 

AlArenal

Top Contributor
R.B. hat gesagt.:
Also "SELECT" im Dateisystem.
Microsoft hat es versucht. Microsoft ist kläglich gescheitert ;)

Sind sie nicht. Nur weil es in Vista nicht drin ist, ist das Thema als solches noch lange nicht durch. Rausgenommen wurde es nur aus Performance-Gründen. Zu dumm nur für MS, dass Oracle auch für MS zu groß ist, um sie aufzukaufen (iFS).

Die sinnvollste Lösung ist, du nimmst eine ordentliche Datenbank ;)

Der Frager wollte wohl auch kaum eine "unordentliche" benutzen...
 

deleted

Bekanntes Mitglied
AlArenal hat gesagt.:
R.B. hat gesagt.:
Also "SELECT" im Dateisystem.
Microsoft hat es versucht. Microsoft ist kläglich gescheitert ;)

Sind sie nicht. Nur weil es in Vista nicht drin ist, ist das Thema als solches noch lange nicht durch. Rausgenommen wurde es nur aus Performance-Gründen. Zu dumm nur für MS, dass Oracle auch für MS zu groß ist, um sie aufzukaufen (iFS).

Die sinnvollste Lösung ist, du nimmst eine ordentliche Datenbank ;)

Der Frager wollte wohl auch kaum eine "unordentliche" benutzen...

Nun wenn ich etwas versuche und lauthals ankündige, aber nicht hinbekomme, und wie du sagst, den Kokurrenten, der es könnte, nicht aufkaufen kann...
Wo bin ich denn dann NICHT gescheitert?

Und ich glaub, du hast ganz genau verstanden, was ich mit "ordentliche Datenbank" gemeint hab.
Nämlich eine Datenbank eines etablierten Herstellers :wink:
 

AlArenal

Top Contributor
Geschietert ist man erst dann, wenn man gar nicht hinbekommt. Aufgeschoben ist nicht aufgehoben.

Und "etablierter Hersteller" ist oft nur eine nette Umschreibung für eine Liste von Namen, die man in Unkenntnis von Alternativen via Suchmaschine ratztfatz beisammen bekommt. Es ist aber nciht zwingend, dass ein jeder bei MySQL AB, Microsoft, Oracle, IBM, ... glücklich wird.
Sich u.U. selbst was zu stricken ist gar nicht soo ungewöhnlich.

One size doesn't fit it all.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Verschiedene Versionen mit Datenbanken Allgemeine Java-Themen 3
Thallius Verschiedene entities für gleichen Code…. Allgemeine Java-Themen 8
OnDemand Zentrale "Drehscheibe" für verschiedene APIs Allgemeine Java-Themen 14
M verschiedene Dokumente auslesen Allgemeine Java-Themen 1
MiMa Logging mit log4j2 in verschiedene Dateien? Allgemeine Java-Themen 22
J Verschiedene Runtime Versionen gleichzeitig? Allgemeine Java-Themen 12
H Klassen LibGDX - Verschiedene Klassen als Value in einer Map Allgemeine Java-Themen 8
P mehrer Verschiedene Objekte in einer Klasse erstellen. Allgemeine Java-Themen 4
K Verschiedene Sprachen Allgemeine Java-Themen 1
C -Verschiedene Versionen eines Programms verwalten Allgemeine Java-Themen 7
M Verschiedene Pilzartenerkennung Allgemeine Java-Themen 0
I Verschiedene Arrays auslesen Allgemeine Java-Themen 6
nrg Verschiedene JREs im Browser konfigurieren Allgemeine Java-Themen 6
S Best Practice verschiedene Exceptions fangen und neue Exception erzeugen Allgemeine Java-Themen 11
G DesignPattern Verschiedene Services Allgemeine Java-Themen 4
B Verschiedene Objekte in Abhängigkeit eines Typs instanziieren. Allgemeine Java-Themen 17
M massenhaft verschiedene Date-Pattern Allgemeine Java-Themen 3
R Eclipse Verschiedene Ergebnisse bei Berechnung eines double-Werts Allgemeine Java-Themen 5
R Implementierung eines Interface durch 2 verschiedene Klassen Allgemeine Java-Themen 6
faetzminator verschiedene Beans, verschiedene Felder "koppeln" Allgemeine Java-Themen 3
J Verschiedene Klassen als "Object" in ArrayList und dann in for-Schleife erzeugen!? Allgemeine Java-Themen 2
S Welche Datenstruktur für verschiedene Sprachen sinnvoll? Allgemeine Java-Themen 2
H Zwei verschiedene Dateien mittels einem Binärstream übertragen? Allgemeine Java-Themen 13
M verschiedene Methonden innerhalb des gleichen Threads Allgemeine Java-Themen 7
N verschiedene Klasse laden (Designfrage) Allgemeine Java-Themen 2
S Package in verschiedene Projekten einbinden? Allgemeine Java-Themen 3
D Verschiedene Datein aus einer Zip Datei ins Programm laden Allgemeine Java-Themen 4
S Konstruktoren, verschiedene Klassen, Methoden. Allgemeine Java-Themen 3
M Verschiedene Modi bei AbstractTableModel Allgemeine Java-Themen 10
J Verschiedene Klassen, verschiedene Ströme? Allgemeine Java-Themen 6
V 1 Methode für viele verschiedene Klassen? Allgemeine Java-Themen 9
L Verschiedene Versionen eines Interfaces Allgemeine Java-Themen 12
J Verschiedene Starteinstellungen Allgemeine Java-Themen 7
J Programm für verschiedene Betriebssystem vertreiben? Allgemeine Java-Themen 10
M 2 verschiedene LookAndFeels in einem Fenster möglich? Allgemeine Java-Themen 6
D Gehts praktischer? Thema:Verschiedene Instanzen einer Klasse Allgemeine Java-Themen 3
C Verschiedene JDKs Allgemeine Java-Themen 6
M Regular Expression - verschiedene Ausdrücke testen (grep | ) Allgemeine Java-Themen 5
C verschiedene Klassenarten Allgemeine Java-Themen 3
G Verschiedene Auflösungen Allgemeine Java-Themen 6
H verschiedene Java Versionen Allgemeine Java-Themen 3
A Textfeld soll verschiedene Datumseingaben akzeptieren Allgemeine Java-Themen 5
antonia09 Einkaufszettel Persistenz und Serialisierung Allgemeine Java-Themen 6
P Persistenz/Anwendungsmodel Allgemeine Java-Themen 5
C Polymorphie Fragen zur Annotations von Persistenz Allgemeine Java-Themen 2
I Persistenz ohne App-Server? Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben