Datenbänke und Verzeichnisse

Hallo liebe Gemeinde!
Ich denke es ist egal, wie ich zu dem Programm kam, deswegen komme ich direkt zum Punkt. Aufgabe ist es, in Java eine Benutzeroberfläche zu programmieren, mit der man auf eine Datenbank (mehrere tausende txt Files) zugreift, und diese mit Stichworten, Dokumentenname etc dursuchen kann. Bei Treffern, wird Verzeichnis und Zeile aufgelistet. Ich lerne Java in der Schule, deswegen ist mein Wissen eingeschränkt. Bisher programmierte ich nur in Eclipse am lokalen Workspace, mit Datenbanken und Files lesen hatte ich noch nie etwas zutun. Bei GUI‘s erstellen habe ich kein Problem. Jedoch hat mich das letzte Thema während der Schulzeit (MVC) stark verwirrt und zuerstörte quasi alle meine Vorkenntnisse in Sachen Programmierstil. Nun bin ich mit diesem ersten „Projekt“ komplett überfordert und weiß nicht wie ich dieses angehen soll. Ich hoffe ihr habt einige Tipps oder Erfarungen für mich (ich muss das Programm bis Ende August fertig haben). Abm.: Ich erwarte nicht, dass mir jemand Code schreibt. Eher simple(!) Erklärung.
Ich bedanke mich schon mal im Voraus!
Greetz
 

httpdigest

Top Contributor
Du solltest die Anwendung erstmal in ihre zwei hauptsächlichen funktionalen Bestandteile aufteilen:
1. die Benutzeroberfläche zum Eingeben von Suchanfragen und Anzeigen gefundener Dateien und Zeilen
2. effizientes Indexieren und Durchsuchen der Text-Dateien

Ich beziehe mich erstmal nur auf 2.:

Ich nehme mal an, dass es wahrscheinlicher ist, dass ein Benutzer mehr Suchanfragen auf die Datenbasis losfeuert als dass sich die Datenbasis (die Dateien) ändert. Dann solltest du diesen Use-Case (effizientes Suchen auf den Dateien) optimieren.
Das heißt, du solltest nicht jedesmal durch alle tausende Dateien linear per I/O durchrasen, wenn der Benutzer eine Suchanfrage stellt, sondern stattdessen einmal den Inhalt der Dateien in einer für die Suche effizienten Datenstruktur, nämlich einem invertieren Index, halten. Ein solcher Index kann in seeehr geringer Zeit (nur wenige Microsekunden) eine Suchanfrage nach beliebigen Strings über zigtausende von Dateien/Dokumenten beantworten. Und ein Framework, welches einen solchen Index mit der Möglichkeit von Suchanfragen darauf bereits implementiert, ist Lucene.
Zusätzlich kannst du mit Javas WatchService API auch sehr effizient auf Änderungen an den Dateien informiert werden und diese dann re-indexieren. Somit hast du immer einen aktuellen Suchindex und eine sehr effiziente Suche.
 
Du solltest die Anwendung erstmal in ihre zwei hauptsächlichen funktionalen Bestandteile aufteilen:
1. die Benutzeroberfläche zum Eingeben von Suchanfragen und Anzeigen gefundener Dateien und Zeilen
2. effizientes Indexieren und Durchsuchen der Text-Dateien

Ich beziehe mich erstmal nur auf 2.:

Ich nehme mal an, dass es wahrscheinlicher ist, dass ein Benutzer mehr Suchanfragen auf die Datenbasis losfeuert als dass sich die Datenbasis (die Dateien) ändert. Dann solltest du diesen Use-Case (effizientes Suchen auf den Dateien) optimieren.
Das heißt, du solltest nicht jedesmal durch alle tausende Dateien linear per I/O durchrasen, wenn der Benutzer eine Suchanfrage stellt, sondern stattdessen einmal den Inhalt der Dateien in einer für die Suche effizienten Datenstruktur, nämlich einem invertieren Index, halten. Ein solcher Index kann in seeehr geringer Zeit (nur wenige Microsekunden) eine Suchanfrage nach beliebigen Strings über zigtausende von Dateien/Dokumenten beantworten. Und ein Framework, welches einen solchen Index mit der Möglichkeit von Suchanfragen darauf bereits implementiert, ist Lucene.
Zusätzlich kannst du mit Javas WatchService API auch sehr effizient auf Änderungen an den Dateien informiert werden und diese dann re-indexieren. Somit hast du immer einen aktuellen Suchindex und eine sehr effiziente Suche.
Okay danke, das hat mir schon mal etwas weitergeholfen. Aber wie gehe ich das am besten an? Was mache ich zuerst, wie beginnt man sowas? Und wenn ich das richtig verstanden habe, ist Lucene schon ein Programm, dass genau das macht, was ich versuche zu programmieren?
 

httpdigest

Top Contributor
Lucene selbst ist kein Programm. Es hat z.B. keine Benutzeroberfläche. Apache Solr wäre so etwas das auf Lucene basiert. Das würde ich aber nicht nehmen, weil du ja deine eigene GUI (vermutlich) selbst implementieren sollst.
Lucene ist im Kern eine Implementierung eines invertierten Indexes und einer Suchengine auf diesem Index mit einem Scoring/Ranking (i.e. "wie gut passt eine Suchanfrage auf die Ergebnisse") nach dem Vector Space <Model.
Du fütterst es also mit sogenannten Dokumenten. Was genau ein Dokument ist, ist dir dabei freigestellt.
Um Informationen über die Zeile eines Textes in den Textdateien zu erhalten, wird allgemein empfohlen, jede Zeile der eingelesenen Textdateien als separates Lucene Document zu indexieren. Als Teil des Documents speicherst du dann auch den Dateinamen der Datei aus der die Zeile kam.

Wie gehst du jetzt am besten vor?

Vielleicht möchtest du ja auch erstmal mit der GUI anfangen. Hier stehen dir mehrere Möglichkeiten offen:
- eine Java Desktop Anwendung auf Basis von AWT/Swing
- eine Java Desktop Anwendung auf Basis von JavaFX
- eine Java Desktop Anwendung auf Basis von SWT
- eine Webanwendung per einfachem serverseitig generiertem statischem HTML ohne Ajax (z.B. via JavaServer Pages oder JavaServer Faces, ...)
- eine Webanwendung per dynamischem HTML (z.B. via Angular, vue.js, React, etc.)

Welche GUI-Technologie soll es denn also erstmal sein?
 
Lucene selbst ist kein Programm. Es hat z.B. keine Benutzeroberfläche. Apache Solr wäre so etwas das auf Lucene basiert. Das würde ich aber nicht nehmen, weil du ja deine eigene GUI (vermutlich) selbst implementieren sollst.
Lucene ist im Kern eine Implementierung eines invertierten Indexes und einer Suchengine auf diesem Index mit einem Scoring/Ranking (i.e. "wie gut passt eine Suchanfrage auf die Ergebnisse") nach dem Vector Space <Model.
Du fütterst es also mit sogenannten Dokumenten. Was genau ein Dokument ist, ist dir dabei freigestellt.
Um Informationen über die Zeile eines Textes in den Textdateien zu erhalten, wird allgemein empfohlen, jede Zeile der eingelesenen Textdateien als separates Lucene Document zu indexieren. Als Teil des Documents speicherst du dann auch den Dateinamen der Datei aus der die Zeile kam.

Wie gehst du jetzt am besten vor?

Vielleicht möchtest du ja auch erstmal mit der GUI anfangen. Hier stehen dir mehrere Möglichkeiten offen:
- eine Java Desktop Anwendung auf Basis von AWT/Swing
- eine Java Desktop Anwendung auf Basis von JavaFX
- eine Java Desktop Anwendung auf Basis von SWT
- eine Webanwendung per einfachem serverseitig generiertem statischem HTML ohne Ajax (z.B. via JavaServer Pages oder JavaServer Faces, ...)
- eine Webanwendung per dynamischem HTML (z.B. via Angular, vue.js, React, etc.)

Welche GUI-Technologie soll es denn also erstmal sein?
Mit der AWT/Swing Methode komme ich ganz gut zurecht. Bzw das habe ich bereits gelernt, somit müsste ich mir nicht neues aneignen. Ich könnte also zuerst die Benutzeroberfläche programmieren, danach die Klasse für das Suchen und danach die Verknüpfung der beiden Klassen?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I 1) Laufwerke auslesen 2) Verzeichnisse von Laufwerke auslesen Java Basics - Anfänger-Themen 2
R Verzeichnisse rekursiv nach Dateiduplikaten durchsuchen Java Basics - Anfänger-Themen 5
F Verzeichnisse und Dateien kopieren Java Basics - Anfänger-Themen 3
Z Verzeichnisse mit Inhalt löschen löschen Java Basics - Anfänger-Themen 7
A Verzeichnisse nach Datei / Ordner durchsuchen Java Basics - Anfänger-Themen 11
P Text in Verzeichnisse suchen Java Basics - Anfänger-Themen 4
B Verzeichnisse und Dateien in JAR Files Java Basics - Anfänger-Themen 7
L Verzeichnisse mit Inhalt verschieben auf UNIX Java Basics - Anfänger-Themen 5
H BITTE SCHNELLE HILFE - VERZEICHNISSE DURCHGEHEN Java Basics - Anfänger-Themen 2
M Verzeichnisse rekursiv durchlaufen und dann RegEx Java Basics - Anfänger-Themen 6
T Zugriff auf geschützte Verzeichnisse? Java Basics - Anfänger-Themen 7
M Dateien/Verzeichnisse anlegen Java Basics - Anfänger-Themen 10
D Verzeichnisse durchsuchen Java Basics - Anfänger-Themen 4
J Verzeichnisse auslesen Java Basics - Anfänger-Themen 3
D Verzeichnisse rekursiv durchlaufen Java Basics - Anfänger-Themen 3
DEvent Dialogfenster in dem man Verzeichnisse auswählen kann Java Basics - Anfänger-Themen 6
Z Klassen, Pakete und Verzeichnisse Java Basics - Anfänger-Themen 8
V Jtree: Alle Verzeichnisse und Ordner anzeigen, aber wie? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben