Mongodb tree Architektur

Raphael_

Aktives Mitglied
Hi,
ich brauche in meiner mongodb eine tree Architektur, als mit Ordnern usw. Meine Frage wären, wie macht man das am besten mit dem Zugriff? Angenommen ein user greift auf eine Datei im Ordner Test1 zu, schickt mein Frontend dann einfach den ich sage mal Pfad mit? Order wie ist da der best practice?
 

KonradN

Super-Moderator
Mitarbeiter
Kannst Du evtl. etwas genauer beschreiben, was Du abbilden willst?

Denkbar sind da generell viele Dinge. Wenn es eine Tree Struktur selbst ist, dann beschreibt dieser Link die Möglichkeiten:
MongoDB | Model Tree Structures. In MongoDB, there are several ways to… | by NodeTeam | Dev Genius

Prinzipiell kann es auch einfach ein Dokument sein, dass eben ein Attribut Pfad hat und dann suchst Du halt die Datei mit Pfad "/whatever/dir/someFile.txt". Aber du hast da keine direkte Referenz zu einem Verzeichnis Objekt oder so.

Du hast also viele Möglichkeiten und Du musst genau wissen, was Du brauchst: Was für Objekte sind wichtig? Was für Zugriffe werden benötigt?
 

Raphael_

Aktives Mitglied
Kannst Du evtl. etwas genauer beschreiben, was Du abbilden willst?

Denkbar sind da generell viele Dinge. Wenn es eine Tree Struktur selbst ist, dann beschreibt dieser Link die Möglichkeiten:
MongoDB | Model Tree Structures. In MongoDB, there are several ways to… | by NodeTeam | Dev Genius

Prinzipiell kann es auch einfach ein Dokument sein, dass eben ein Attribut Pfad hat und dann suchst Du halt die Datei mit Pfad "/whatever/dir/someFile.txt". Aber du hast da keine direkte Referenz zu einem Verzeichnis Objekt oder so.

Du hast also viele Möglichkeiten und Du musst genau wissen, was Du brauchst: Was für Objekte sind wichtig? Was für Zugriffe werden benötigt?
Naja, also man soll Karteikarten erstellen können und diese dann in Ordnern abspeichern können. Also es gibt dann bspw einen Ordner Englisch, der dann z.b. die Karteikarte Test enthält. In den Ordnern liegt also keine Datei sondern eigentlich nur json Daten.
Und was du mit Zugriffen meinst, ist mir gerade noch nicht ganz klar, es soll jedenfalls in Zukunft möglich sein, dass andere user auf die Ordner und somit auch auf die Inhalte der Ordner Zugriff haben, wenn du das meinst.
 

KonradN

Super-Moderator
Mitarbeiter
Ein Vorgehen, wenn Du ein Programm schreibst, ist immer, dass Du Dir im Detail überlegst, was es machen soll. Das wird dann bei einigen Vorgehen oft als User Stories beschrieben. Wenn Du sowas umsetzen willst, dann kommt es dazu, dass Du Elemente identifizierst, die implementiert werden müssen.

Hier hast Du dann also Karteikarten, die in Ordnern oder Karteikästen organisiert sind. Das kannst Du also entsprechend modellieren.

Und wenn Du dann die User-Stories betrachtest, dann weisst Du, was mit den Daten alles passieren muss. Da kannst Du also hin gehen und überlegen, was für Zugriffe notwendig sind und was daher notwendig ist. Eine Möglichkeit ist, dass Du die Ordner in einer Collection speicherst ohne die Karten. Die Karten haben dann die id des Ordners, in dem sie sind.
Wenn Du aber immer einen ganzen Ordner brauchst, dann könntest Du einfach die Ordner zusammen mit den Karteikarten speichern. Das geht auch. Das macht das Laden eines Ordners einfach. Aber wenn Du Anpassungen hast, dann wird das problematisch. Sprich: Eine Karte wird von einem Ordner in einen anderen verschoben: Du lädst also beide Ordner (mit evtl. jeweils tausenden von Karten) um die Änderung zu machen und dann beide wieder zu speichern. Klingt nicht wirklich gut. So also solche Verschiebe-Operationen geplant sind, dann solltest Du das trennen.
Das ist nur ein Beispiel. Aber ich hoffe, es zeigt, was ich meine.

Daher sind so pauschal keine Aussagen machbar. Aber so eine Aufteilung, dass die Karteikarten in einer eigenen Collection sind und nur eine ID von einem Ordner haben, hört sich erst einmal vernünftig an und dürfte nicht mit wirklichen Problemen kommen.

Aber die Fragestellung ist erst einmal: Brauchst Du das wirklich? Wenn der Ordner nur aus einem Begriff besteht wie "Englisch", dann brauchst du da ggf. gar keine eigene Entity. Das ist dann einfach nur ein String Attribut in der Karteikarte.
Ein Nachteil dabei: Wenn Du einen Ordner umbenennen willst, dann musst Du alle Karteikarten des Ordners anpacken.
 

Raphael_

Aktives Mitglied
Ein Vorgehen, wenn Du ein Programm schreibst, ist immer, dass Du Dir im Detail überlegst, was es machen soll. Das wird dann bei einigen Vorgehen oft als User Stories beschrieben. Wenn Du sowas umsetzen willst, dann kommt es dazu, dass Du Elemente identifizierst, die implementiert werden müssen.

Hier hast Du dann also Karteikarten, die in Ordnern oder Karteikästen organisiert sind. Das kannst Du also entsprechend modellieren.

Und wenn Du dann die User-Stories betrachtest, dann weisst Du, was mit den Daten alles passieren muss. Da kannst Du also hin gehen und überlegen, was für Zugriffe notwendig sind und was daher notwendig ist. Eine Möglichkeit ist, dass Du die Ordner in einer Collection speicherst ohne die Karten. Die Karten haben dann die id des Ordners, in dem sie sind.
Wenn Du aber immer einen ganzen Ordner brauchst, dann könntest Du einfach die Ordner zusammen mit den Karteikarten speichern. Das geht auch. Das macht das Laden eines Ordners einfach. Aber wenn Du Anpassungen hast, dann wird das problematisch. Sprich: Eine Karte wird von einem Ordner in einen anderen verschoben: Du lädst also beide Ordner (mit evtl. jeweils tausenden von Karten) um die Änderung zu machen und dann beide wieder zu speichern. Klingt nicht wirklich gut. So also solche Verschiebe-Operationen geplant sind, dann solltest Du das trennen.
Das ist nur ein Beispiel. Aber ich hoffe, es zeigt, was ich meine.

Daher sind so pauschal keine Aussagen machbar. Aber so eine Aufteilung, dass die Karteikarten in einer eigenen Collection sind und nur eine ID von einem Ordner haben, hört sich erst einmal vernünftig an und dürfte nicht mit wirklichen Problemen kommen.

Aber die Fragestellung ist erst einmal: Brauchst Du das wirklich? Wenn der Ordner nur aus einem Begriff besteht wie "Englisch", dann brauchst du da ggf. gar keine eigene Entity. Das ist dann einfach nur ein String Attribut in der Karteikarte.
Ein Nachteil dabei: Wenn Du einen Ordner umbenennen willst, dann musst Du alle Karteikarten des Ordners anpacken.
Danke für deine Antwort, von User stories hab ich schonmal gehört und das werde ich jetzt als nächstes umsetzen. Das ich einfach den Ordner als Attribut einer Karte speichere klingt eigentlich vernünftig, da habe ich dann aber das Problem, dass vlt in unterschiedlichen Ordnern der selbe Ordnername vorkommen kann. Ich müsste dann also wahrscheinlich jedem Ordner ne uuid zuordnen richtig?
 

KonradN

Super-Moderator
Mitarbeiter
Bezüglich User Stories und dem agilen Vorgehen, so ist das etwas, das ich in JAdventure schon etwas behandelen konnte. Evtl. hilft das (und ich freue mich über jede Rückmeldung).

Wenn Du Ordner und Karten ablegst, dann hast Du das jeweils in einer eigenen Collection. Ordner haben dann eine id und was sie sonst noch so brauchen.
Karten haben dann auch eine eigene id und dann noch ein Attribut ordnerId, in dem die id des Ordners zugewiesen wird.

Dann kannst Du mehrere Ordner mit dem gleichen Namen haben.
 

Raphael_

Aktives Mitglied
Bezüglich User Stories und dem agilen Vorgehen, so ist das etwas, das ich in JAdventure schon etwas behandelen konnte. Evtl. hilft das (und ich freue mich über jede Rückmeldung).

Wenn Du Ordner und Karten ablegst, dann hast Du das jeweils in einer eigenen Collection. Ordner haben dann eine id und was sie sonst noch so brauchen.
Karten haben dann auch eine eigene id und dann noch ein Attribut ordnerId, in dem die id des Ordners zugewiesen wird.

Dann kannst Du mehrere Ordner mit dem gleichen Namen haben.
Hi,
also ich denke, dass es am besten und performantesten wäre, wenn man für jeden Ordner eine UUID erstellt. Weil dann weiß ich je genau, welche Karte in welchem Ordner liegt, da das Attribut "Ordner" dann eben die UUID enthält und wenn man den Namen ändert, dann muss ich auch nicht alle Karten "anfassen". Jetzt kommt mir aber die Frage in den Sinn, woher soll mein Frontend denn die UUID vom Ordner kennen? Ist das dann so, dass der Ordner ja vor dem Abfragen der Karteikarten ja eh abgefragt werden muss (sonst kann man die Karten ja garnicht sehen) und daher kennt das Frontend dann die UUID? Das kommt mir so halt etwas komisch vor, wäre jetzt aber der einzige mögliche Weg, der mir einfallen würde.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Mongodb testen bzw mocken Datenbankprogrammierung 3
R Mongodb Daten werden immer überschrieben Datenbankprogrammierung 7
R Mongodb Unterschied MongoClient und Repository. Datenbankprogrammierung 3
R Mongodb Daten in einem bestimmten Document speichern Datenbankprogrammierung 1
R Mongodb Authentication failed Datenbankprogrammierung 6
R Beste Lösung für User Erstellung in mongodb Datenbankprogrammierung 1
6 MongoDB Dokument basierend auf Referenz finden Datenbankprogrammierung 1
MongoDB-Datenbank in Androidstudio einbinden Datenbankprogrammierung 1
T Spring MongoDB: Auswertung schlägt fehl Datenbankprogrammierung 1
T Spring MongoDB: Prüfen ob bereits eine Email existiert Datenbankprogrammierung 15
T Spring MongoDB @Indexed(unique=true) Datenbankprogrammierung 0
T Spring MongoDB self-reference Datenbankprogrammierung 2
N MongoDB Datenbankprogrammierung 5
S MongoDB löschung ohne Cascade Datenbankprogrammierung 1
OnDemand MySQL und mongoDB wann macht was Sinn? Datenbankprogrammierung 11
S MongoDB Community Edition Datenbankprogrammierung 1
S MongoDB - Abfrageergebnis in Array speichern Datenbankprogrammierung 2
C Über Classpath MongoDB Treiber einbinden und korrekte import Pfade Datenbankprogrammierung 8
B MongoDB- Queryception Datenbankprogrammierung 6
M MongoDb Versändnis Fragen: ( multiserver, morphia/morphium ) Datenbankprogrammierung 0
A MongoDB Passwort Problem Datenbankprogrammierung 0
T MongoDB: Morphia REST 505 Exception Tomcat Datenbankprogrammierung 2
G MongoDB - klassisches one to many Datenbankprogrammierung 2
P MongoDB vs. andere DBs Datenbankprogrammierung 0
D Daten posten auf RestApi (Mongodb/NoSQL) Datenbankprogrammierung 0
F MSSql oder MongoDB für die Speicherung von POI Datenbankprogrammierung 9
D MySQL Excel in Datenbank in Tree Datenbankprogrammierung 4
B Wie persistiert man eine Tree-ähnliche Datenbankstruktur? Datenbankprogrammierung 2
V mysql - tree auslesen und richtig ordnen Datenbankprogrammierung 4
M tree in datenbank abbilden Datenbankprogrammierung 3
M Tablen auslesen und als Tree anzeigen lassen Datenbankprogrammierung 2
looparda Architektur für JPA Hibernate Umstieg Datenbankprogrammierung 14
B Derby/JavaDB Client-Server-Architektur mit Datenbank Datenbankprogrammierung 6
X PostgreSQL Hibernate geschickte Architektur Datenbankprogrammierung 2
L Programm-Architektur bei DB-Zugriff Datenbankprogrammierung 6

Ähnliche Java Themen

Neue Themen


Oben