Welches Datenbanksystem ist geeignet?



  • Hallo,

    momentan arbeite ich an einem Maschinensteuerprogramm und es besteht jetzt die Notwendigkeit aus statistischen Gründen Messwerte etc. in einer Datenbank abzulegen. Ich habe bereits mit einfachen Zugriffen über die ODBC-Treiber (Access-Datenbank) gearbeitet, dies waren aber immer Single-User-Anwendungen.
    Geplant sind bis zu 5 Maschinen, die pro gefertigtes Produkt etwa 18-25 verschiedene Werte generieren. Die Datenbanken sollen über ein ganzes Jahr laufen und zu Beginn eines neuen Jahres wird mit einer leeren Datenbank gestartet. Grob geschätzt werden etwa 40.000 Datensätze pro Jahr anfallen. Die Rechner der Maschinen sind vernetzt, die Datenbank selbst soll auf dem einzigen Server des Netzwerkes installiert werden. Von einem weiteren PC werden dann die "Statistikarbeiten" gemacht.
    Jetzt meine Frage: Welches Datenbanksystem eignet sich dafür? Wie wird die Synchronisation realisiert (gleichzeitiger Zugriff)?
    Bin leider völlig neu auf diesem Gebiet und bin über jede Hilfe dankbar.

    Vorab schon mal vielen Dank.



  • Kannst dir eines deiner Wahl aussuchen. Was du hier beschreibst stellt kaum ein System vor Probleme. Und da du nur Datensätze hinzufügst, wirst du auch keine Probleme mit gleichzeitigem Zugriff bekommen. Musst also noch nicht mal unbedingt auf Locking oder Transaktionen achten, wobei ich dir das natürlich schon ans Herz legen würde.

    Kostenlos: MySQL, Postgre, Berkeley (...)
    Nicht-so-kostenlos: Informix, Sybase, Oracle (...)

    Nur halt von Access die Finger lassen, aber davon willst du ja eh weg.



  • MySQL ist kostenlos, solange du kein Geld für die Anwendung verlangst. Sonst muss man auch Gebüren zahlen.



  • Euch beiden erst mal vielen Dank. War immer der Meinung, dass es problematisch ist von verschiedenen Stellen auf die Datenbank zuzugreifen. Es ist in der Tat so, dass eine Maschine einen kompletten Datensatz neu anlegt. Es gibt aber auch Situationen (z.B. Nacharbeitungsschritte), da müssen einzelne Felder eines bestehenden Datensatzes überschrieben werden. Auch wenn genau in diesem Moment eine Statistikabfrage durchgeführt wird gibts da keine Probleme?
    Wie gesagt es ist Neuland für mich. Hab bisher nur Access gemacht, geschuldet auch der Tatsache, dass man einige Vorarbeit auch mit MS Access machen kann. Werde mich wohl da mal mit MySQL befassen, Geld gibts dafür keins wenns fertig ist...
    Dafür muss ich aber erst noch tiefer in die Materie rein und muss erst mal ein paar gute Tutourials suchen. Was ich auch noch nicht ganz verstanden habe: SQL ist doch (wie es der Name sagt) eine Sprache fürs Datenbankhandling. Wenn ich das in reinen C-Code umsetzen muss nützt mir das doch nicht allzuviel, oder gibts da Klassen, die eine SQL-Anfrage übersetzen können?



  • Prinzipiell kann es schon zu Problemen bei gleichzeitigem Zuriff kommen.
    So könnte ein lesender Client inkonsistente Daten erhalten, wenn er bei einem Lesezugriff bereits Daten abrufen würde, welche nur der Momentaufnahme eines Änderungsvorgangs eines schreibenden Clients entsprechen (also nicht alle logisch zusammengehörigen Änderungen wurden schon abgeschlossen).
    Das hängt aber direkt mit der Transaktionsunterstützung der Datenbank zusammen. In der Regel bietet ein DBMS hierfür verschiedene Isolationsstufen an, welche für jede Verbindung angegeben werden können (DirtyRead, ReadCommitted ...).
    Benötigt man eine Gewährleistung für konsistente Daten über verschiedene Operationen hinweg (mehrere Updates und Inserts 'gleichzeitig' zum Beispiel), dann muss das DBMS auch eine externe Transaktionssteuerung zur Verfügung stellen. Damit ist es dann möglich explizit eine Transaktion zu öffnen und diese nach allen(!) zusammengehörigen Änderungen abzuschließen.

    Alle genannten Systeme unterstützen dies (mittlerweile) ausreichend.

    Wenn du in C mit einer Datenbank kommunizieren willst, solltest du entsprechende Bibliotheken verwenden die dies unterstützen. Solche Bibliotheken bieten dann auch Möglichkeiten SQL Abfragen an die Datenbank zu senden und liefern gegebenenfalls Ergebnismengen zurück.



  • MySQL ist kostenlos, solange du kein Geld für die Anwendung verlangst. Sonst muss man auch Gebüren zahlen.

    @Sadi und Rest

    Kann mir jemand sagen, ob man auch für ein Programm Lizenzgebühren zahlen muss, wenn das Programm selbst ohne MySQL auskommt, es aber dazu da ist, u.a. auch MySQL Datenbanken auszulesen, aber auch für PostgreSQL oder andere konzipiert ist?

    Es wäre quasi so, dass ich das Programm weiterverkaufe und der Kunde es dann installiert, wofür er keine Datenbank braucht, und mit dem Programm kann er dann seine Datenbanken (z.B. MySQL, Oracle, etc.) auslesen.

    Müssen dafür Lizenzgebühren bezahlt werden von mir?



  • @deetee: Mir ist da nur ein Bsp. mit Access bekannt (auch wenn ihr da nicht so drauf steht). Solange Dein Programm die reinen Access-Dateien verwendet musst Du keine Lizenzgebühren bezahlen. Die Treiber werden ja vom Betriebssystem bereitgestellt und der Zugriff erfolgt ja aus dem C durch Nutzung der Treiber. Denke bei MySQL dürfte das auch so sein, solange Du Deine Anwendung nicht kommerzialisierst.

    @mortimo: Deinen Darstellungen entnehme ich, dass eigentlich das gleiche zu beachten ist wie beim Umgang mit mehreren Threads in einem Programm (Stichwort Synchronisation). Nur bieten die DBMS heute diese Funktionalität. Wird dies dem DBMS über den Treiber mitgeteilt oder sind das globale Einstellungen? Hab mich gestern noch mal eingelesen und festgestellt, dass auch die Klassen CRecordSet Member besitzen, die Teile der SQL-Abfrage aufnehmen können (m_pstrFilter z.B. für den WHERE-Teil der SQL-Abfrage). Aber gibt es auch Klassen, die die gesamte Abfrage aufnehmen und an den Treiber weiterleiten?



  • @AndyDD
    ja aber genau das möchte ich doch...es kommerzialisieren, es verkaufen. Deswegen auch meine Frage.

    Aber ich denke bei MySQL müsste ich für mein Tool dann keine Lizenzkosten bezahlen, da mein Programm selbst ja kein MySQL benötigt. Es kann zwar darauf zugreifen, aber es braucht keine eigene MySQL Datenbank, z.B. zur Installation.



  • deetee schrieb:

    @AndyDD
    ja aber genau das möchte ich doch...es kommerzialisieren, es verkaufen. Deswegen auch meine Frage.

    Aber ich denke bei MySQL müsste ich für mein Tool dann keine Lizenzkosten bezahlen, da mein Programm selbst ja kein MySQL benötigt. Es kann zwar darauf zugreifen, aber es braucht keine eigene MySQL Datenbank, z.B. zur Installation.

    Mein letzter Stand hierzu ist folgender:
    MySQL hat zwei Lizenzmodelle.
    1. Man stellt sein Programm unter die Open-Source Lizenz von MySQL, dann ist es kostenlos.
    2. Man nimmt die kommerzielle Lizenz, die ist aber sogar recht günstig.

    Der ODBC-Connector von MySQL steht unter der selben Lizenz. Dieser ist normalerweise für den Zugriff nötig (es soll aber auch anderst gehen).



  • Die Einstellungen bezüglich Isolationsstufe und ähnlichem lassen sich mittels Treiber pro Verbindung einstellen.

    Ich kenne mich leider mit CRecordset nicht sonderlich aus, glaube aber in einem Beispiel mal etwas mit 'open' oder so gelesen zu haben. Darüber besteht die Möglichkeit auch eine komplette Abfrage mit dem CRecordset zu verbinden. Genaues müsste man der Doku dazu entnehmen.



  • es scheint keiner zu verstehen, was ich meine.

    Mein Programm selbst braucht kein MySQL. Man kann es in Verbindung mit MySQL nutzen, aber man muss z.B. zur Installation des Programms kein MySQL haben, es ist keine Vorraussetzung.



  • Du müsstest dir nur Gedanken machen, wenn du zur optionalen Unterstützung von MySQL in deinem Programm externe Bibliotheken verwendest die einer entsprechenden Lizenz unterliegen. Verwendest du allerdings nichts dergleichen, dann passt das so.



  • deetee schrieb:

    es scheint keiner zu verstehen, was ich meine.

    Mein Programm selbst braucht kein MySQL. Man kann es in Verbindung mit MySQL nutzen, aber man muss z.B. zur Installation des Programms kein MySQL haben, es ist keine Vorraussetzung.

    Doch, wir versuchen es gerade. Es muss ja nicht heißen wenn man ein Programm schreibt, dass man es auch verkaufen will oder muss. Ich schreibe bei uns in der Firma, damit einige Problemchen überhaupt gelöst werden. Meine Programme werden vermutlich das Haus nicht verlassen.
    Was MySQL angeht: ich hab mal auf der HP ein wenig rumgelesen. Es ist schon so wie mortino sagt. Wenn Du Bibliotheken mitgibst unterliegen die u.U. Lizenzbedingungen. Zweitens war mein Gedanke schon beim MySQL-Server. Das ist auch etwas, was ich hier vorhabe. Solltest Du den mit Deinem Programm ausliefern unterliegt der auch den Lizenzbedingungen. Allerdings habe ich das mit dem Open Source nicht so richtig verstanden. Nur wenn man ein Programm an jemanden weitergibt, was so was vordert, so sollte man das auch mitliefern. Anders siehts sicher aus, wenn die Datenbank ins Programm gelinkt wird, also nocht über einen Betriebssystemtreiber oder einen Server drauf zugegriffen wird. Dann dürfte das so oder so kostenfrei sein.

    P.S.: die bieten jetzt schon die Version 5.x an. Was ist Ist das noch eine Beta und sollte man erst mal bei der 4.x bleiben?



  • @mortimo
    das Programm ist in PHP geschrieben, da dürfte es keine Probleme geben. Man kann damit Datenbanken auslesen, u.a. auch MySQL DBs, aber auch andere, kommt eben darauf an, welche beim dem Käufer in Betrieb ist. Aber das ist ja nicht meine Sache, geht mich ja nichts an. Also ich nutze nur die PHP Funktionen, zum auslesen von MySQL DBs, mehr nicht.



  • @deetee: Wenn das so ist, dann musst du dir keine Gedanken um die Datenbanklizenzen bzgl deines Programmes machen, da ja erst der Benutzer die Datenbank und evtl. Treiber installiert.

    @AndyDD: MySQL 5.0 ist schon released. Nur die 5.1 ist noch in der Beta Version. Somit kannst auch schon die 5er verwenden, wenn du möchtest. Allgemein würd ich immer eine ältere Release Version einer Beta Version vorziehen, zumindest wenn man diese Version auch anderen Nutzern zugänglich machen möchte. Aber das muss ja jeder selbst entscheiden 😉



  • Die stabile Version wird von MySQL als Production Release betitelt.

    Wenn MySQL zum Einsatz kommt empfehle ich als Tabellentyp 'InnoDB', damit Transaktionen genutzt werden können (commit/rollback). Der Tabellentyp 'MyIsam' ist ein wenig leichter zu handhaben, hat aber einige Nachteile.



  • Ich ziehe eine released Version auch einer Beta vor, keine Frage. Wenn man sich auf der Page umschaut, so stellen die drei Varianten zum Download vor: Windows Essentials (x86), Windows (x86), Without installer (unzip in C:\). Was ist der Unterschied zwischen den letzten beiden? Warum ist die Version ohne Installer größer wie die mit?
    Eine weitere Frage bezieht sich auf den Treiber. Ist der da schon dabei oder muss ich den separat downloaden, damit von anderen Rechnern auf den Server zugegriffen werden kann?
    Anscheinend fehlen mir doch noch wesentliche Grundlagen, deshalb entschuldigt meine für euch sicher sehr simplen Fragen.



  • AndyDD schrieb:

    Ich ziehe eine released Version auch einer Beta vor, keine Frage. Wenn man sich auf der Page umschaut, so stellen die drei Varianten zum Download vor: Windows Essentials (x86), Windows (x86), Without installer (unzip in C:\). Was ist der Unterschied zwischen den letzten beiden? Warum ist die Version ohne Installer größer wie die mit?

    Hier sind die Unterschiede beschrieben: http://dev.mysql.com/doc/refman/5.0/en/windows-choosing-package.html

    AndyDD schrieb:

    Eine weitere Frage bezieht sich auf den Treiber. Ist der da schon dabei oder muss ich den separat downloaden, damit von anderen Rechnern auf den Server zugegriffen werden kann?

    Bei Version 4 musste man die noch seperat runterladen, ich weis nicht, ob die heute mitgeliefert werden. Hier kann man sie aber downloaden: http://dev.mysql.com/downloads/connector/

    AndyDD schrieb:

    Anscheinend fehlen mir doch noch wesentliche Grundlagen, deshalb entschuldigt meine für euch sicher sehr simplen Fragen.

    Wenn du schon alles wüsstes, dann bräuchtest du nicht mehr zu fragen 😉

    btw, Entschuldigung, daß ich die englischen MySQL-Seiten verlinkt habe, das müsste es auch auf Deutsch geben, aber die deutsche Version ist nicht immer auf dem neusten Stand.



  • Danke Fincki, hat mir schon weitergeholfen. Ein wenig Englisch kann ich ja und dafür reicht es noch aus es zu verstehen. Ich habe jetzt den Server am laufen und auch auf einem Rechner den ODBC-Treiber installiert. Kann man den Server auch von anderen Rechnern aus konfigurieren? Bei der Installation hab ich zumindest diese Oprtion aktiviert, nur weiss ich jetzt nicht wie ich von anderen Rechnern drauf zugreiffen kann. Gibts außerdem noch andere Tools, die nicht über Kommandozeile arbeiten? Es sollen auch Leute administrtieren, die zu windowsverwöhnt sind. Mich störts ja nicht.... 🙄



  • Grafische Tools gibts hier: http://www.mysql.com/products/tools/
    Irgendwie bin ich nicht mehr auf dem neuestem Stand. Für Version 4 gab es noch das MySQL Control Center, das scheint jetzt vom MySQL Administrator abgelöst worden zu sein.


Anmelden zum Antworten