Datenspeicherung in hsqldb

Status
Nicht offen für weitere Antworten.

Alex_winf01

Top Contributor
Nun habe ich eine weitere Frage: Wie in anderen Threads bereits beschrieben, wird mein Projekt mehrbenutzerfähig. Das schafft hsqldb. Folgendes fiktives Beispiel:

Eine Kundenverwaltung, ein Kunde kann mehrere Bestellungen mit mehreren Artikeln. Mehrere Mitarbeiter greifen auf die Datenbank Kundenverwaltung zu. Ein Kunde A wird von einem Mitarbeiter AM bearbeitet. Ein Kunde B wird von einem Mitarbeiter BM bearbeitet. D. h. Mitarbeiter AM und Mitarbeiter BM greifen ggf. gleichzeitig auf die Datenbank Kundenverwalung und gleichzeitig auf die Tabellen Bestellungen und Artikel zu.

Nun habe ich gelesen, dass hsqldb die Daten in Textdateien abspeichert. Das gibt doch immer Probleme mit den Zugriffsrechte, oder bin ich da auf dem Holzweg? :(
 

HoaX

Top Contributor
bist du, zumindest teilweise. da nur hsqldb auf die datei zugreift wird es sich kaum selbst ein bein stellen.

welche locking-methoden hsqldb anbietet steht in der doku. was die genau machen lässt sich googeln und ist hier nicht in einer antwort zu beschreiben.
 

stevieboy

Aktives Mitglied
Ich würde auch auf die Speichermethode von hsqldb achten.

Da es für schnelle Zugriffe optimiert ist, legt es sich standardmäßig als Memory-DB, d.h. vollständig im RAM laufend, an.

Am Anfang ist das ja noch ganz schön, aber nach jedem Neustart der DB muss diese zunächst die Grunddaten einlesen und arbeitet danach erst das GANZE LOG ab mit allen Aktionen seit der Erstellung. Ein Neustart kann demnach eine ganze Zeit dauern. Zudem liegen alle Kundendaten und Änderungen anhand des Logfiles im Klartext vor.

Mit etwas Konfiguration kann man diese Klippen aber sicherlich umschiffen.
 

HoaX

Top Contributor
iirc gibts beim CREATE TABLE nen keyword dass die tabelle nicht im log sondern als binärdatei gespeichert wird.
 

Alex_winf01

Top Contributor
@ HoaX

Gibt es dann nicht Probleme mit den Zugriffsrechten, wenn die Tabellen in Binärdateien gespeichert werden? Es werden garantiert mehrere Benutzer gleichzeitig auf die Tabellen zugreifen.
 

Alex_winf01

Top Contributor
@ HoaX

Du meinst doch mit Binärdateien die Texttabellen? Da kann ich mir sehr gut vorstellen, dass es mit den Zugriffsrechten doch Probleme gibt.
 

HoaX

Top Contributor
und wieso? es greift immer der selbe benutzer zu, nämlich der unter dessen account der db-server läuft ...
 

Alex_winf01

Top Contributor
@ HoaX

ich habe mitlerweile in einem anderen Forum gelesen, wenn mehrere Anwender gleichzeitig in die Binärdatei schreiben, dass dann die Datei zerschossen wird. So wie ich es mir gedacht habe. Kannst Du mir kurz erläutern, wie Du das verhindern willst? Mittels RMI?
 

HoaX

Top Contributor
link bitte? und lies bitte endlich das handbuch!

es gibt einen embedded-mode bei dem die anwendung direkt auf die datenbank zugreift und es gibt einen server-mode.

wenn du _einen_ server laufen hast und alle darüber die datenbank verwenden wirst du keine probleme bekommen, wieso auch? der server kümmert sich schon darum dass alles schön der reihe nach geht.

wenn du natürlich mit zwei oder mehr anwendungen/servern gleichzeitig auf die datenbank zugreifst ist natürlich schnell die db im arsch. aber das kann theoretisch nur passieren wenn die datei-locks umgangen werden, z.B. durch windowsfreigaben.

was meinst du wie andere datenbankserver wie mysql,postgresql,... es machen dass mehrere darauf zugreifen können? im endeffekt landen die daten immer irgendwo in einer datei.
 

Alex_winf01

Top Contributor
@ All

ich hab jetzt den ganzen Tag gegoogelt und in die Doku geschaut und hab nix gefunden über die locking-Methoden. Kann mir keiner helfen? :oops:
 

Alex_winf01

Top Contributor
@ ms

Danke für den Link. Hab den Anhang nicht unbedingt als locking-Methoden angesehen. Ich habe dabei folgendes Verständnisproblem:

Unter der Überschrift
werden die verschiedenen Dateien beschrieben. Unter der Überschrift
werden die verschiedenen Zustände der Dateien beschrieben. Unter der Überschrift
werden die Prozeduren beschrieben.

Aber wie kann ich verhindern, wenn Anwender A den Datensatz B gerade bearbeitet und Anwender C möchte den Datensatz D bearbeiten, dass hsqldb die ganze Datei sperrt? Das ist nach meiner Meinung hieraus nicht ersichtlich. Es soll ja nur der Datensatz B für den Anwender C gesperrt werden und nicht die ganze Datei.
 

ms

Top Contributor
Alex_winf01 hat gesagt.:
Aber wie kann ich verhindern, wenn Anwender A den Datensatz B gerade bearbeitet und Anwender C möchte den Datensatz D bearbeiten, dass hsqldb die ganze Datei sperrt? Das ist nach meiner Meinung hieraus nicht ersichtlich. Es soll ja nur der Datensatz B für den Anwender C gesperrt werden und nicht die ganze Datei.
Dafür sorgt zum einen die Datenbank selbst.
Zum anderen sollte vom Betriebssystem her nur ein Benutzer exklusive Rechte für die Datenbankdateien haben.
Siehe hier: http://www.hsqldb.org/doc/guide/ch03.html#instance_setup-section

Zum Verständnis nochmal. Wenn ein Benutzer auf die Datenbank zugreift, dann über den Server (per SQL) und niemals auf die Dateien direkt.

ms
 

Alex_winf01

Top Contributor
Nur so zum Verständnis:

Ich starte den Server, schreibe meine normalen SQL-Dateien zum Einfügen, bearbeiten, löschen. Definiere, welcher Anwender was darf und gut ist? Alles andere muss der DB-Server und das Betriebssystem klären?
 

ms

Top Contributor
Ist das wirklich so zweifelhaft und unglaublich was ein RDBMS leistet?

Alex_winf01 hat gesagt.:
Ich starte den Server, schreibe meine normalen SQL-Dateien zum Einfügen, bearbeiten, löschen. Definiere, welcher Anwender was darf und gut ist? Alles andere muss der DB-Server und das Betriebssystem klären?
Was verstehst du unter "...normale SQL-Dateien zum Einfügen, bearbeiten, löschen?"
Die Datenbank wird i.d.R. einmal mit SQL-Statements gefüttert wo Benutzer, Tabellen, usw... angelegt und Berechtigungen gesetzt werden und später im laufenden Betrieb die Applikation (Javaprogramm) durch Benutzereingaben wieder SQL-Statements ausführt die Datensätze einfügt, löscht, aktualisiert und zurückgibt.

ms
 

Alex_winf01

Top Contributor
@ ms

so hatte ich das auch gemeint. Einmal anlegen und dann immer wieder mit SQL-Statements füttern. Dann haben wir vom selben gesprochen.
 

Alex_winf01

Top Contributor
@ ms

vielleicht bin ich auch nur etwas "begriffsstuzig". Während des Studiums hab ich mit MySQL gearbeitet. Da hab ich eine Login-Klasse gehabt, die die Verbindung zur DB aufbaut. Dann hab ich eine Klasse Einfuegen gehabt. In dieser Klasse Einfuegen habe ich eine Methode definiert, die so aussah:

Code:
public static void artikel_einfuegen()
	{
			int anzahl;
			
			// Spalten, die eingefügt werden sollen
			String insert = "Insert into artikel (Artikel_Nr, Name, Beschreibung, Preis, aktionspreis, gewicht, link, lagerbestand) values (";
			
			//Daten in String
			String artikel_nr_String = Artikel.artikel_nr.getText();
			String name_String = Artikel.name.getText();
			String beschreibung_String = Artikel.beschreibung.getText();			
			String gewicht_String = Artikel.gewicht.getText();
			String preis_String = Artikel.preis.getText();
			String aktionspreis_String = Artikel.aktionspreis.getText();
			String link_String = Artikel.link.getText();
			String lagerbestand_String = Artikel.lagerbestand.getText();			
			
			
		try
		{   
            //Statement erzeugen
			Statement st_artikel_einfuegen = Login.connection.createStatement();
			
			// Insert-Anweisung zusammenstellen
			insert = insert + "'" +	artikel_nr_String.trim() + "'" + ",";
			insert = insert + "'" + name_String.trim() + "'" + ",";
			insert = insert + "'" + beschreibung_String.trim() + "'" + ",";
			insert = insert +       preis_String.trim() + ",";
			insert = insert +       aktionspreis_String.trim() + ",";
			insert = insert  +      gewicht_String.trim() + ",";    
			insert = insert +"'" +  link_String.trim()+"'" + ",";
			insert = insert +       lagerbestand_String + ")";
			
			// Insert ausführen
			anzahl = st_artikel_einfuegen.executeUpdate(insert);
			
			if (anzahl==1)
			{
				JOptionPane.showMessageDialog(null, " 1 Insert ok",
					"DB-Meldung", JOptionPane.INFORMATION_MESSAGE);
			}
			else
			{
				JOptionPane.showMessageDialog(null, " Es ist ein Fehler beim Einfügen in die Tabelle Artikel aufgetreten",
				"DB-Fehler", JOptionPane.ERROR_MESSAGE);
			}
			
			// Statement schließen
			st_artikel_einfuegen.close();
		}
		catch(SQLException e)
		{
			JOptionPane.showMessageDialog(null, " Es ist ein Fehler beim Einfügen in die Tabelle Artikel aufgetreten",
			"DB-Fehler", JOptionPane.ERROR_MESSAGE);
		}
	}

mit der Zeile
Code:
// Statement schließen
			st_artikel_einfuegen.close();

regel ich den Zugriff auf den einzelnen Datensatz. So ähnlich muss ich das in hsqldb auch machen, oder?
 

ms

Top Contributor
Probiers aus, dann wissen wir es.
Grundsätzlich sollte es in etwa so funktionieren.

ms
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G hsqldb datenspeicherung Datenbankprogrammierung 2
H MySQL Hibernate datenspeicherung (baumstruktur) Datenbankprogrammierung 3
I HSQLDB HSQLDB 2.5.0 - Wie Loggen abstellen? Datenbankprogrammierung 4
B HSQLDB - auto_increment als unexpected token ? Datenbankprogrammierung 1
E Abfrage auf HSQLDB Datenbankprogrammierung 4
windl MySQL und HSQLDB Datenbankprogrammierung 4
D HSQLDB HSQLDB in PHP-Projekt einbinden? Datenbankprogrammierung 7
I Inhalt einer hsqldb anzeigen Datenbankprogrammierung 1
G java.lang.ClassNotFoundException: org.hsqldb.jdbcDriver Datenbankprogrammierung 4
M HSQLDB oder DERBY - warum SCRIPT Datei? Datenbankprogrammierung 0
T Hibernate, HSQLDB und UNIQUE Datenbankprogrammierung 2
F hsqldb Fehler - unknown source Datenbankprogrammierung 11
E HSQLDB Eclipse + Geronimo + HSQLDB = org.hsqldb.jdbcDriver in classloader Datenbankprogrammierung 5
M HSQLDB 2.0 - wie tmp-Verzeichnis löschen Datenbankprogrammierung 2
S HSQLDB DELETE-Statement funktioniert nicht Datenbankprogrammierung 4
M Bei HSQLDB etwas wie OPTIMIZE TABLE? Datenbankprogrammierung 2
F HSQLDB HSQLDB lässt mich nicht auf erstellte Tabelle zugreifen Datenbankprogrammierung 12
D datenbank (hsqldb) in runnable jar einbinden Datenbankprogrammierung 2
E Herangehensweise Neues Projekt mit Netbeans / HSQLDB / JPA Datenbankprogrammierung 3
T Hsqldb: java.lang.NoClassDefFoundError: org/hsqldb/Server Datenbankprogrammierung 2
F Kann keine Verbindung mit HSQLDB aufbauen Datenbankprogrammierung 2
S HSQLDB Kopiere Tabellen Datenbankprogrammierung 2
H hsqldb - Database must be shutdown Datenbankprogrammierung 10
O HSQLDB Verbindung schlägt fehl Datenbankprogrammierung 3
K Jpa hsqldb Datenbankprogrammierung 1
N Problem mit HSQLDB Datenbankprogrammierung 5
N Hsqldb und text tables source not found Datenbankprogrammierung 5
B HSQLDB Datenbank Manager Datenbankprogrammierung 19
R SELECT aus hsqldb mit Parameter Datenbankprogrammierung 2
R HSQLDB Datenbankprogrammierung 10
D H2 DB oder doch HSQLDB ? Datenbankprogrammierung 2
A HSQLDB Performance bei erstem Zugriff Datenbankprogrammierung 6
G HSQLDB überprüfen, ob Tabelle bereits existiert Datenbankprogrammierung 3
@ HSQLDB: socket creation error Datenbankprogrammierung 6
G HSQLDB Files Datenbankprogrammierung 5
G maximale Einträge in HSQLDB Datenbankprogrammierung 7
A Umgang mit hsqldb Datenbankprogrammierung 24
A Fehler in der HSQLDB Datenbankprogrammierung 6
A Problem mit der Anbindung zur hsqldb Datenbankprogrammierung 18
J HSQLDB ohne JDBC Datenbankprogrammierung 8
C Keine Verbindung zu HSQLDB möglich Datenbankprogrammierung 22
G Probleme mit Laden des JDBC-Treiber in HSQLDB Datenbankprogrammierung 2
G HSQLDB - kann mir jemand Packages erstellen? Datenbankprogrammierung 6
B HSQLDB und die log-Datei Datenbankprogrammierung 10
W HSQLDB Datenbankprogrammierung 6
G HSQLDB als Dateien anlegen Datenbankprogrammierung 5
S nullpointerexception bei HSQLDB Datenbankprogrammierung 4
L HSQLDB sichern (import und export von DB) Datenbankprogrammierung 3
D HSQLDB in JAR Datenbankprogrammierung 3
S hsqldb und ant Datenbankprogrammierung 3
S Hsqldb java.lang.NullPointerException Datenbankprogrammierung 2
D HSQLDB 2xPK + AutoInc Datenbankprogrammierung 22
M HSQLDB Server Problem Datenbankprogrammierung 2
T HSQLDB => diverses Datenbankprogrammierung 21
L persistentes Speichern von Daten in der HSQLDB ? Datenbankprogrammierung 5
A Weitere Fragen zu hsqldb Datenbankprogrammierung 6
A Text-Tabellen in HSQLDB Datenbankprogrammierung 9
A HSQLDB Datenbankprogrammierung 10
A Hsqldb ClassDefNotFound Datenbankprogrammierung 2
M Problem mit HSQLDB Datenbankprogrammierung 2
N Hibernate & hsqldb: Problem bei db-update Datenbankprogrammierung 7
G Problem mit der Startenzeit einer HSQLDB Datenbankprogrammierung 4
T HSQLDB, wie mache ich das mit hsqldb.cache_scale? Datenbankprogrammierung 13
E BufferedImage in hsqldb speichern Datenbankprogrammierung 5
B HSqlDb Datenbankprogrammierung 2
X HSQLDB und Variablen Datenbankprogrammierung 7
R hsqldb: performance, große tabellen und so Datenbankprogrammierung 10
P DERBY vs HSQLDB (Vor- Nachteile) Datenbankprogrammierung 3
EagleEye INSERT INTO Problem mit HSQLDB Datenbankprogrammierung 8
G Vector in hsqldb schreiben Datenbankprogrammierung 5
M Cast-Problem - HSQLDB Datenbankprogrammierung 3
C HSQLDB korrekter Shutdown Datenbankprogrammierung 2
C hsqldb Befehle in Java Datenbankprogrammierung 19
P HSQLDB Mehrbenutzerbetrieb Datenbankprogrammierung 7
D HSQLDB Datenbank Zugriff! Datenbankprogrammierung 4
H javaw bleibt bei hsqldb hängen Datenbankprogrammierung 12
D HSQLDB installieren ... Datenbankprogrammierung 8

Ähnliche Java Themen

Neue Themen


Oben