Laden...

Einfache Datenbank für parallele Zugriffe

Erstellt von Black_Rider vor 11 Jahren Letzter Beitrag vor 11 Jahren 3.247 Views
B
Black_Rider Themenstarter:in
12 Beiträge seit 2012
vor 11 Jahren
Einfache Datenbank für parallele Zugriffe

Hallo zusammen

Ich will ein Programm zu Verwaltung der Aufträge in der Firma schreiben und weiss noch nicht wie ich am besten die Datenbank erstelle.

Anforderungen:

  • Speichern einer einfachen Tabelle (50 Spalten/ 10 Zellen)
  • Zugriff von verschiedenen PC's (max. 4 Stück) gleichzeitig.
  • Speicherort in einer normalen Datei in einem normalen freigegeben Ordner im Netzwerk

Es soll nichts grosses werden, so simpel wie möglich.

Gibts da etwas?

Freundliche Grüsse

Black_Rider

16.807 Beiträge seit 2008
vor 11 Jahren

Dein Problem wird der zeitgleiche Zugriff sein - den wirst Du irgendwie synchronisieren müssen.
An für sich kann man dafür ruhig ne XML Datei nehmen, die problematik des zeitgleichen Zugriffs und evtl. Locking auf Objekte musst halt alles selbst machen, ansonsten wird die Datei irgendwann korrupt.

Im Prinzip kann man dafür SQLite verwenden; aber selbst da liest man immer wieder, dass bei Shared Files einfach die Datendatei irgendwann defekt ist.
Ist also alles andre als empfehlenswert.

G
497 Beiträge seit 2006
vor 11 Jahren

auch wenn mir dabei das Frühstück hochkommt, fällt mir zu dem Thema am ehesten eine Access-Datenbank ein.

4.221 Beiträge seit 2005
vor 11 Jahren

Access im Netz... Shared File-DB is the root of all evil.

Ein kurzer Netzunterbruch beim speichern und alles ist im Eimer....

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

6.911 Beiträge seit 2009
vor 11 Jahren

Hallo Black_Rider,

Speicherort in einer normalen Datei in einem normalen freigegeben Ordner im Netzwerk

Muss das so sein? Das verursacht mehr Probleme als es bringt. Nimm besser eine richtige Datenbank - z.B. den SQL Server (Express). Damit hast du auf lange Sicht sicher am wenigsten Probleme, auch wenn es mal doch mehr als 4 Clients werden sollten.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

T
2.219 Beiträge seit 2008
vor 11 Jahren

Alternativ könnt ihr euch eine Linux Kiste mit PostgreSQL/MySQL aufsetzen falls es mal mehr als 4 GB Daten werden oder ihr besorgt euch einen SQL Server von Microsoft.
Kostet nichts und reicht für eine kleine Firma.

Die Provider zum ansprechend der DB gibt es auch für .Net
Eine Netzwerk Freigabe mit einer Dateibasierten DB wie SQLite kann man für parallele Zugriffe nicht empfehlen eben da dies mehr Probleme macht.

Gerade im parallelen Zugriff sind normale Datenbanken perfekt.

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

F
10.010 Beiträge seit 2004
vor 11 Jahren

Sql Express hat schon seit 2008 das Limit auf 10GB hochgesetzt.

B
Black_Rider Themenstarter:in
12 Beiträge seit 2012
vor 11 Jahren

Hallo zusammen

Vielen Dank für die Antworten. Dann werde ich wohl, bis es läuft, einen MySQL Server auf meinem NAS einrichten und danach einen in der Firma zum laufen bringen.

Sehe nur gerade noch ein Hinderniss. Wenn Client A etwas ändert, muss das ja Client B auch "erfahren". Wie mache ich das, ohne das der die ganze Zeit die Liste neu laden muss um diese abzugleichen? Gibts da n Trick?

Gruss Black_Rider

T
2.219 Beiträge seit 2008
vor 11 Jahren

@FZelle
Danke wusste ich leider noch nicht 😃
Hatte bisher nur die Express von 2008 im Einsatz.
Muss wohl mal wieder die Express Versionen durchschauen.

@Black_Rider
Ich denke mal, da wirst du nicht drum herum kommen.
Es stellt sich aber die Frage warum deine Anwendung alle Daten in einer Liste im Speicher halten muss.

Gibt es eine Möglichkeit die Daten der Clients zu trennen?
Falls nicht wüsste ich keinen Weg, ohne einen Abgleich der Daten, um dieses Problem zu lösen.

Nachtrag:
Hab mir dein Vorhaben nochmals durchgelesen.
Im Normalfall sollte es eigentlich nicht nötig sein die Daten im Speicher zu halten.
Hier könntest du die Daten nur zum auflisten einmal einladen.
Wenn ein Eintrag bearbeitet werden soll kann man ein "Lock" Feld in der Datenbank setzen.
Somit würden die anderen Clients sehen, dass der Eintrag nicht bearbeitet werden kann, da jemand bereits den Eintrag bearbeitet.

Die Auflistung der Aufträge kannst du eigentlich immer Live Abfragen.
Somit entfällt der Abgleich, da alle Clients die selbe Datenbank sehen.
Alternativ könntest du per Timer die Aufträge bei den Clients alle n-Sekunden aktualisieren um die aktuellen Aufträge anzuzeigen.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

1.820 Beiträge seit 2005
vor 11 Jahren

Hallo!

Für Benachrichtigungen ist das Stichwort "Notifications". MS SQL bietet dass, ich weis nur aktuell nicht, ob auch bei SQL Express. Ansonsten ginge noch Firebird, die unterstützt dass ebenfalls.

Ansonsten könntest du es über Trigger versuchen, die sind in den meisten Datenbanken supported. Speziell für mySQL wäre hier dieser Hinweis interessant: MySQL 5.1 Reference Manual

EDIT: Oder man schreib sich einen DataLayer, welcher alle DB-Änderungen vornimmt und einen zusätzlichen Mechanismus zur Benchrichtigung anderer Clients enthält (wobei dann allerdings eine zweite Server-Anwendung herhalten müsste).

Nobody is perfect. I'm sad, i'm not nobody 🙁

B
Black_Rider Themenstarter:in
12 Beiträge seit 2012
vor 11 Jahren

Hi zusammen

Nochmal Danke für die Beträge und die Bemühungen.

Nein, die Daten können nicht getrennt werden.

Ich werde mich zuerst in die MySQL DB einlesen und ein Testprojekt erstellen, umd herauszufinden wie ich es am besten realisieren kann.

Schönen Abend zusammen 😃

Gruss Black

F
10.010 Beiträge seit 2004
vor 11 Jahren

Und warum jetzt MySql?
Nur weil es im INet so gehyped wird, bedeutet es nicht das die wirklich gut ist.
Wenn dein NAS es hergibt benutze PostGres.