XML vs. Datenbank vs. lokale Ordnerstruktur

Status
Nicht offen für weitere Antworten.

JFreak

Bekanntes Mitglied
Hallo,

ich stehe derzeit vor dem Problem, hierarchisch organisierte Daten über eine Art CMS per JSP auszuliefern. Es handelt sich dabei um eine Seitenhierarchie, bestehend aus teils statisch vorliegenden Seiten (die einfach aus einer Datei gelesen werden könnten) und teils aus dynamischen Seiten, die von externen Plugins erzeugt werden. Das Problem besteht in der nicht-redundanten Datenhaltung.

Folgende Möglichkeiten gibt es:
1) lokale Ordnerstruktur
1.1) einfache Struktur mit Unterordnern und Textdateien
+ schnell und einfach
- Reihenfolge stets lexikografisch
- Mehrsprachlichkeit schlecht handhabbar
- Metadaten schlecht handhabbar
1.2) Erweiterung von 1.1: statt Textdateien XML-Dateien
+ Einfachheit bleibt erhalten
+ Metadaten und Mehrsprachlichkeit bliebe erhalten
- Anlegen eines Caches notwendig, da nicht bei jedem Seitenaufruf die komplette Hierarchie durchgegangen werden kann
1.3) 1 einzige XML-Datei
+ zentrale Verwaltung
+ einfache Handhabbung mittels XSLT
- langsam
- kompletter Inhalt einer Site muss in den RAM bei jedem Aufruf
2) Datenbank
+ volle Möglichkeiten
+ gute Performance
- zusätzlicher DB-Server erforderlich

Z. Zt. habe ich 1.1 implementiert, was aber offensichtlich nicht haltbar ist. Derzeit tendiere ich zu 1.2. Wofür würdet ihr euch entscheiden, unter der Prämisse, dass in einer Produktivumgebung a) häufig Seiten strukturell verändert werden (verschieben/löschen/anlegen); b) häufig Inhalte verändert werden oder c) meist so bleibt wie es ist. Wie sähe ein Kompromiss zwischen a)-c) aus. Ich sehe das momentan so:

a) -> 2
b) -> 1.2
c) -> 1.3 (mit Vorratshaltung der XML-Datei im entsprechend großen RAM des Servers)
Kompromiss -> 1.2

Lars
 

JFreak

Bekanntes Mitglied
Bei der Datenbanklösung kann ich mir momentan noch kein schönes Tabellenlayout vorstellen. Kannst du mir vielleicht einen Tipp geben? Anforderung: In einen Seitenbaum sollen sich sowohl statische als auch dynamische (von Plugins erzeugte) Seiten eingehängt werden können. Daraus soll aber möglichst einfach ein Inhaltsverzeichnis erzeugt werden können.
 
M

maki

Gast
Wenn es dir nur um das Inhaltsverzeichniss geht, wozu dann die Unterscheidung statisch/dynamisch?

Ansonsten: Es gibt mehrere Möglichekiten Bäume in Tabellen zu speichern, einfachste Möglichkeit die mir jetzt einfällt:

Tabelle Node
---------------
id (PK)
parent (FK), kann auch null sein
 

robertpic71

Bekanntes Mitglied
JFreak hat gesagt.:
...
2) Datenbank
..
- zusätzlicher DB-Server erforderlich

Mit einer embbedded Datenbank wie z.B. H2 (Alternativ: HSQL, Derby) läuft die Datenbank mit dem Java-Webcontainer mit. Also auch dieser Nachteil ist "umgehbar".

Hier noch eine Applikation, die genauso arbeitet: Onlinekatalog
* embedded H2 Datenbank, diese speichert alle html-Seiten
* Datenbankstruktur ungefähr so, wie sie von maki beschrieben wurde
* Seiten via Onlineeditor ändernbar

Für die Anforderungen (statisch/dynamisch) würdest du wohl noch einen Schalter je Treenode brauchen (user darf ändern true/false).

/Robert
 

JFreak

Bekanntes Mitglied
Ich hab mich vielleicht etwas ungünstig ausgedrückt. Es gibt global einen Seitenbaum, der erstmal nur aus statischen Ordnern und Seiten besteht. Das ist vergleichbar mit einem einfachen Websiteaufbau ohne Skripte. Jetzt sollen allerdings noch in die vorhandenen Ordner ähnlich wie bei "mount" andere Seiten eingehängt werden, die von Plugins erzeugt werden.
Dabei definiere ich dynamisch als "von URL-Parametern abhängig" und statisch als "nicht von URL-Parametern abhängig".

Beispiel:

Website:
- Startseite
- Projekte
- FAQ
- Galerie

Das ganze kann als statische Struktur angelegt werden. Allerdings soll die Galerie dynamisch sein, d. h. die Inhalte sollen von den URL-Parametern abhängig sein. D. h. ein Plugin "mountet" sich im Verzeichnis / in den Baum mit der id="gallery". Wenn nun /gallery/index z. B. mit dem Parameter "page=0" das Galerie-Plugin beauftragt werden, die Seite darzustellen.

Rufe ich dagegen /faq auf, soll ein statischer Inhalt ausgegeben werden.

Ich hoffe, das ist verständlich, das von Robert kommt dem nahe.

Lars
 

JFreak

Bekanntes Mitglied
Hallo!

so, ich hab ein bisschen umgebaut. Das ganze soll jetzt in eine MySQL-5.1-Datenbank mit XML-Unterstützung. Layout:

pages
-------
id <<PK>>
parentid <<FK>>
name NOT NULL
tags
cms (boolean)
navigation (boolean)

* cms gibt an, ob die Seite durch den Content Manager gehen soll (also Template außenrum, Plug-In aufrufen, Inhalt erzeugen, ausgeben)
* navigation gibt an, ob die Seite im Inhaltsverzeichnis erscheinen soll

content
---------
id <<PK>>
lang NOT NULL, default = *
pageid <<FK>>
content NOT NULL
title NOT NULL

Die hierarchische Struktur ist somit wie von maki vorgeschlagen. Dank MySQLs XML-Fähigkeiten kann ich dann auch den Navigations-Cache wesentlich schneller aufbauen und das Servlet braucht sich nicht mehr darum zu kümmern.

Hat noch jemand Vorschläge dazu?

Lars
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Newsletter versenden - Datenbank Design Allgemeines EE 0
E Spring Fileverwaltung in Datenbank oder Logfile? Allgemeines EE 2
L JavaEE Webanwendung - Datenbank-Verbindung aufbauen Allgemeines EE 18
D JSON abspeichern mit gleichen Datenbank Eintrag Allgemeines EE 3
P JSF Wohin kommt die .db Datei der Datenbank? Allgemeines EE 2
B Integrierte Datenbank in Wildfly Server Allgemeines EE 2
B Datenbank Resource wird nicht gefunden Allgemeines EE 1
J JSTree in Web-App: Datenbank-Beziehungen verschwinden nach unbestimmter Zeit Allgemeines EE 4
J JSF Glassfish jdbcRelam und Oracle-Datenbank - WEB9102: Web Login Failed Allgemeines EE 0
C JSF Bestimmte Daten aus der Datenbank anzeigen lassen Allgemeines EE 13
T Strings - Partieller Abgleich mit Datenbank Allgemeines EE 4
D GWT mit Hibernate und Sql Datenbank Allgemeines EE 2
I JSF Userbild in die Datenbank machen? Allgemeines EE 6
R Je nach Benutzer anderes Datenbank-Schema auswählen Allgemeines EE 4
A Anfängerfrage: daten in datenbank speichern Allgemeines EE 8
W Daten mit j2ee aus datenbank abfragen Allgemeines EE 8
J ejb3.0 datenbank problem Allgemeines EE 2
remus JBoss Authentifizierung mit MYSQL-Datenbank Allgemeines EE 4
H Eine Datenbank - 1 Datenmodell - 2 Anwendungsumgebungen Allgemeines EE 2
E JBoss Hibernate Datenbank-Timeout Allgemeines EE 3
T Wie Datenbank und Servlet koppeln? Allgemeines EE 3
G Entity Bean ignoriert Datenbank Allgemeines EE 16
N Warenkorb ohne Datenbank Allgemeines EE 2
M Servlet (Bilder aus Datenbank liefern) läuft nur einige Zeit Allgemeines EE 12
S String escpapen für JavaScript, Datenbank, HTML Allgemeines EE 2
F Datenbank und JSF Allgemeines EE 2
P struts "beliebige motive in der datenbank finden" Allgemeines EE 6
T XML, Beans, Datenbank. Kann mir jemand helfen? Allgemeines EE 5
K [Tomcat 5.5.12+Axis] Datenbank Zugriff Allgemeines EE 2
T Bildfolge in Datenbank Allgemeines EE 2
P EJB3-Standard und dafür geeignetste SQL-Datenbank Allgemeines EE 21
A Tabstopp-getrennte Daten üb. Webformular in Datenbank laden! Allgemeines EE 2
H Datenbank Abfragen mit EJB Allgemeines EE 9
Tort-E Grundsätzliche Frage -> Lokale Installation Allgemeines EE 2
C Tomcat Zugriff auf lokale Dateien Allgemeines EE 2
W Übliche Art "lokale" Parameter an Servlets zu über Allgemeines EE 2
R JBoss über lokale IP ansprechen Allgemeines EE 16
V Lokale Dateien ausführen, IE,FF Allgemeines EE 2
T EJB - lokale oder entfernte Interfaces Allgemeines EE 3

Ähnliche Java Themen

Neue Themen


Oben