gary: DBMS / Verständnisfrage

Hallo zusammen,

Ich habe da einige fragen, die wiki nicht plastisch genug vermittelt.
Eine Datenbank (DB) ist im prinzip eine Datei mit Werten z. B. getrennt durch Kommata (z. B. CSV oder SEQ Datei). Dann benötigt man ein Programm, das die DB verwaltet. Das macht das Datenbankmanagementsystem (DBMS). Beides zusammen (DB+DBMS) ergeben dann das Datenbanksystem (DBS). Bis hierhin habe ich das glaube ich richtig verstanden.

Soviel zur Theorie, nun zur Praxis:

Mit dem Befehl open, kan ich eine beliebige Datei (werte.seq) öffnen. Beim Öffnen muss ich aber den Parameter angeben, wie die Datei zu öffnen ist:

OUTPUT=zum (Über)schreiben
INPUT=zum Lesen
APPEND=zum schreiben an das ende der geöffneten Datei.

OPEN Dateiname FOR Zugriffsmodus AS Dateinummer

So, nun die Fragen:
1. Wie soll der Programmierer bei drei Werten in der Datei, nur den 2. Wert (Frau)ändern?

Beispiel SEQ-Datei:
"Mann,"Frau","Kind","Ende"

Ich kann mir nur die Lösung vorstellen, dass er alle Werte ausliest, die eine Variable ändert, und dann die ganze Datei inkl. der Änderung neu abspeichert.

2. Eine Datei kann genau nur einmal geöffnet werden. Das heisst, wenn einer die Datei für einen Schreibzugriff geöffnet hat, kann kein Zweiter die Datei zum Lesen öffnen. (Error:File already open). Das fürt mich zu der Frage, wie das bei grossen Datenbanken gemacht wird, wo _gleichzeitig_ beispielsweise 50 Leute daten lesen und ändern. Existieren da einfach 50 Kopieen der selben DB, um allen zugriff zu gewähren, und über nacht gleichen sich dann die DB gegenseitig aus? Was für ein durcheinander.

Wie gesagt, hatte bis jetzt nichts mit DBS am Hut, da Access das für mich erledigt hat.

Viele Grüsse gary

  1. Mahlzeit,

    Ich habe da einige fragen, die wiki nicht plastisch genug vermittelt.
    Eine Datenbank (DB) ist im prinzip eine Datei mit Werten z. B. getrennt durch Kommata (z. B. CSV oder SEQ Datei).

    Nein. Stoppe bitte alle dahingehenden Überlegungen und wilde Spekulierereien - schon der Anfang stimmt nicht.

    Frag die allwissende Müllhalde ... und was ist am entsprechenden Artikel bei Wikipedia so unverständlich?

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. Hi EKKi,

      Den anfang habe ich aber von Wiki

      http://de.wikipedia.org/wiki/Datenbank

      Und so wild ist das nicht, früher habe ich sowas in sehr klein über qbasic realisiert.

      http://de.wikibooks.org/wiki/Quick_Basic:_Dateibearbeitung

      Was eine Daten bank macht habe ich schon, zu mindest im Groben verstanden. Siehe Wiki Artikel. Mich interessiert die technische Seite, wie das geht, dass mehrere Leute verschiedene Daten lesen und schreiben können, obwohl technisch eine Datei nur eiinmal geöfnet werden kann.

      Oder werden die Daten in einzelne Dateien unterverteilt (mayer.SEQ/Müller.SEQ usw.... Ich dachte das die alle in einer Datei drin stehen.

      Viele Grüsse gary

      1. Hallo,

        wie geht es deinen Duftpatronen? Mal was hinzugekommen, für Wirtschaftssimulationen ... ein Geruch "Das riecht nach Steuerhinterziehung!"

        Was eine Daten bank macht habe ich schon, zu mindest im Groben verstanden. Siehe Wiki Artikel.

        Den Anschein machst du aber nicht wirklich, hast du die Absätze zu "Transaktionen" und "Datenintegrität" nicht gelesen?

        Mich interessiert die technische Seite, wie das geht, dass mehrere Leute verschiedene Daten lesen und schreiben können, obwohl technisch eine Datei nur eiinmal geöfnet werden kann.

        Durch entsprechende Speicherstrukturen, in denen Felder von den Datensätzen Meyer und Co. und natürlich auch die Datensätze selbst eindeutig lokalisiert werden können. Den Rest erledigen "Sperren" ... du kannst ja schliesslich auch nicht zur selben Zeit wie ein anderer Mensch an exakt demselben Ort stehen, sondern musst warten bis er da Platz macht.

        Also man kann schon gezielt in einer Datei die Bytes 0815 bis 4711 überschreiben. Solange dies geschieht, müssen andere Interessenten für diesen Bereich halt warten. Das Management und die Optimierung dieses Prozesses ist eben Aufgabe des Datenbanksystems.

        Oder werden die Daten in einzelne Dateien unterverteilt (mayer.SEQ/Müller.SEQ usw.... Ich dachte das die alle in einer Datei drin stehen.

        Das obliegt der Philosophie des Datenbanksystems.

        Grüsse, Frank

        1. Hallo Frank(no reg),

          wie geht es deinen Duftpatronen? Mal was hinzugekommen, für Wirtschaftssimulationen ... ein Geruch "Das riecht nach Steuerhinterziehung!"

          Kommt darauf an. Aus Sicht des Hinterziehers würde ich den "Pool*-Geruch empfehlen. Aus Sicht des Steuerzahlers müsste man was mit "Faulen"-Eiern erfinden *grins*

          Also man kann schon gezielt in einer Datei die Bytes 0815 bis 4711 überschreiben. Solange dies geschieht, müssen andere Interessenten für diesen Bereich halt warten. Das Management und die Optimierung dieses Prozesses ist eben Aufgabe des Datenbanksystems.

          Behaupten Computerfreaks nicht immer ihre "Kiste" könnte Multitasking? Also meine Oma kann Multitasking: "Die liest die Bunte, sieht fern, quatscht mit dem Opa und strickt einen Pulli" - alles gleichzeitig!

          Viele Grüsse gary

          1. Mahlzeit,

            Behaupten Computerfreaks nicht immer ihre "Kiste" könnte Multitasking? Also meine Oma kann Multitasking: "Die liest die Bunte, sieht fern, quatscht mit dem Opa und strickt einen Pulli" - alles gleichzeitig!

            Die Kiste als ganzes kann ja u.U. auch Multitasking. Aber wie Frank (no reg) schon schrieb: es ist technisch einfach nicht möglich, dass 2 oder mehr Prozesse (die ja durchaus parallel laufen können - Multitasking) GLEICHZEITIG schreibend auf einen Datensatz zugreifen ... versuch mal, gleichzeitig mit 3 anderen Personen auf einer Karteikarte was zu ändern: bestensfalls kommt dabei Müll raus, falls ihr es überhaupt irgendwie auf die Reihe bekommt.

            Genau dafür ist ein DBMS ja da: es regelt die Speicherung und Verwaltung von sowie den Zugriff auf Datenbanken.

            MfG,
            EKKi

            --
            sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
  2. Hallo zusammen,

    Ich habe da einige fragen, die wiki nicht plastisch genug vermittelt.
    Eine Datenbank (DB) ist im prinzip eine Datei mit Werten z. B. getrennt durch Kommata (z. B. CSV oder SEQ Datei). Dann benötigt man ein Programm, das die DB verwaltet. Das macht das Datenbankmanagementsystem (DBMS). Beides zusammen (DB+DBMS) ergeben dann das Datenbanksystem (DBS). Bis hierhin habe ich das glaube ich richtig verstanden.

    Naja, in Wirklichkeit ist das ganze viel komplexer, aber die Grundidee stimmt. So in etwa kann eine Datenbank aufgebaut sein.

    Soviel zur Theorie, nun zur Praxis:

    Mit dem Befehl open, kan ich eine beliebige Datei (werte.seq) öffnen. Beim Öffnen muss ich aber den Parameter angeben, wie die Datei zu öffnen ist:

    OUTPUT=zum (Über)schreiben
    INPUT=zum Lesen
    APPEND=zum schreiben an das ende der geöffneten Datei.

    OPEN Dateiname FOR Zugriffsmodus AS Dateinummer

    So, nun die Fragen:

    1. Wie soll der Programmierer bei drei Werten in der Datei, nur den 2. Wert (Frau)ändern?

    Der Programmierer tut das (normalerweise) gar nicht. Das macht das DBMS für ihn. Dabei gibt es zwei Möglichkeiten: jedes Feld (jeder Wert zwischen den Kommas) hat eine feste maximale Größe und ist niemals größer oder kleiner oder jedes Feld hat eine Variable Größe.
    Haben alle Felder die gleiche feste Größe, kann man aufgrund der Gesamtlänge einfach an die entsprechende Position springen. Das nennt man auch RAM.
    Haben die Felder aber nicht alle eine feste Größe, müssen erst alle Werte in einer Zeile ausgelesen werden, bis man beim gesuchten Wert angekommen ist.

    1. Eine Datei kann genau nur einmal geöffnet werden. Das heisst, wenn einer die Datei für einen Schreibzugriff geöffnet hat, kann kein Zweiter die Datei zum Lesen öffnen. (Error:File already open). Das fürt mich zu der Frage, wie das bei grossen Datenbanken gemacht wird, wo _gleichzeitig_ beispielsweise 50 Leute daten lesen und ändern.

    Gar nicht. Dieses "gleichzeitig" kommt dir nur so vor, weil die Abfragen sehr schnell hintereinander ausgeführt werden.

    1. Hallo Ganane,

      Naja, in Wirklichkeit ist das ganze viel komplexer, aber die Grundidee stimmt. So in etwa kann eine Datenbank aufgebaut sein.

      Na Gott sei Dank ein kleines Lob *g*

      Der Programmierer tut das (normalerweise) gar nicht. Das macht das DBMS für ihn.

      Ja, aber das cshreibt sich doch auch nicht von alleine - oder?

      Haben alle Felder die gleiche feste Größe, kann man aufgrund der Gesamtlänge einfach an die entsprechende Position springen. Das nennt man auch RAM.
      Haben die Felder aber nicht alle eine feste Größe, müssen erst alle Werte in einer Zeile ausgelesen werden, bis man beim gesuchten Wert angekommen ist.

      Aha, das leuchtet ein :-)

      Gar nicht. Dieses "gleichzeitig" kommt dir nur so vor, weil die Abfragen sehr schnell hintereinander ausgeführt werden.

      Ähm..., nehmen wir mal einen Riesenkonzern wie die Telekom. Millionen von Kunden. Herr X aus dem Ort Y meldet seinen Telefonanschluss ab. Der Sachbearbeiter sucht Herr X heraus und setzt z. B. seinen Kundenstatus auf inaktiv. Jetzt springt die Datenbank zu Herr X, ändert den Status, und springt wieder an die stelle in der DB, an dem die Änderung hineingeschrieben werden muss. Natürlich sind heutige Rechner zweifelsfrei schnell. Nur bei Millionen von Kunden Kann ja der Sachbearbeiter ne Tasse Kaffe trinken gehen, bis das System damit fertig ist. Bist du wirklich sicher, das die DB das hintereinander macht?

      Viele Grüsse gary

      1. Ähm..., nehmen wir mal einen Riesenkonzern wie die Telekom. Millionen von Kunden. Herr X aus dem Ort Y meldet seinen Telefonanschluss ab. Der Sachbearbeiter sucht Herr X heraus und setzt z. B. seinen Kundenstatus auf inaktiv. Jetzt springt die Datenbank zu Herr X, ändert den Status, und springt wieder an die stelle in der DB, an dem die Änderung hineingeschrieben werden muss. Natürlich sind heutige Rechner zweifelsfrei schnell. Nur bei Millionen von Kunden Kann ja der Sachbearbeiter ne Tasse Kaffe trinken gehen, bis das System damit fertig ist. Bist du wirklich sicher, das die DB das hintereinander macht?

        Naja, nicht 100% sicher, aber ich denke schon. Es gibt sicher Ausnahmen, wenn wirklich sehr sehr viele Zugriffe täglich stattfinden, werden RAIDs (schreibt man das so?) eingesetzt, sodass die Zugriffsmöglichkeiten pro Zeiteinheit theoretisch verdoppelt werden.

        1. Hi Ganane,

          Gut, dann muss ein selbst geschriebenes DBMS immer sofort die datei nach einer Aktion schliessen, und auf die Nächste Abfrage warten. Also quasi so:

          Lesezugriff Mayer-->Datei für lesen öffnen-->Wert übergeben-->Datei wieder schliessen.

          Öffnen für Schreibzuhgriff-->Mayer in Meier ändern-->Datei schliesen...

          Wärend der Bearbeitung in der Bearbeitungsmaske ist die Datei geschlossen. Erst beim klick auf Übernehmen wird sie zum Schreiben geöffnet und sofort wieder geschlossen. Das heisst theoretisch könnte ein zweiter ein Feld auslesen, wärend das andere Feld vom ersten Mitarbeiter in der Bearbeitungsmaske steht.

          Hier bei wäre natürlich folgendes blöd:

          Arbeiter A hat den Datensatz von Mayer in der Maske und ändert dort auf Meier. Mit dem ganzen Daten satz hat er natürlich auch die Adresse und Telefonnummer in der Maske. Mitarbeiter B holt die Daten mon Mayer, da noch nicht geändert und gibt in diesem Datensatz eine neue Telefonnummer ein. Er speichert. Mitarbeiter A ist langasmer und speichert erst jetz. Jetzt heisst der Herr zwar Meier mit "ei", hat aber wieder seine alte Telefonnummer. Das müsste ja dann auch gegengecheckt werden (z. B. das vor jedem Feld noch ein Datumsfeld steht), über die Aktualität vielleicht.

          Viele Grüsse gary

          1. Arbeiter A hat den Datensatz von Mayer in der Maske und ändert dort auf Meier. Mit dem ganzen Daten satz hat er natürlich auch die Adresse und Telefonnummer in der Maske. Mitarbeiter B holt die Daten mon Mayer, da noch nicht geändert und gibt in diesem Datensatz eine neue Telefonnummer ein. Er speichert. Mitarbeiter A ist langasmer und speichert erst jetz. Jetzt heisst der Herr zwar Meier mit "ei", hat aber wieder seine alte Telefonnummer. Das müsste ja dann auch gegengecheckt werden (z. B. das vor jedem Feld noch ein Datumsfeld steht), über die Aktualität vielleicht.

            Ja, das wird aber nicht durch ein Datumsfeld gegengecheckt sondern die Programmierer für die Eingabemaske kümmern sich darum, dass es DBMS den Zugriff solange sperrt, bis die Änderungen gespeichert werden.

            Das kannst du z.B. ganz gut bei Joomla sehen. Installier dir Xampp, dann installier Joomla und öffne mit BrowserX einen Artikel zum Bearbeiten. Versuchst du dann mit BrowserY denselben Artikel zu bearbeiten, bekommst du eine Fehlermeldung.

            Mitarbeiter B muss also warten, bis Mitarbeiten A fertig ist.

            1. Hi Ganane,

              Mitarbeiter B muss also warten, bis Mitarbeiten A fertig ist.

              Ja, so fährt man 100% sicher. Trotzdem würde ich für umfangreiche Datenbanken ein System bevorzugen, das eine Bearbeitung des selben Datensatzes von mehreren Personen zulässt. Arbeiter A will nur die Adresse ändern, wärend ein  anderer Arbeieter B vielleicht nur den Familienstand von "ledig" auf "verheiratet" setzen. Das wäre mit einem "Vorfeld" vor dem Feld das Datum und die Uhrzeit vergleicht, mit den Daten, die die bisherigen Daten Überschreiben sollen. Sind sie älter, werden sie nicht geschrieben, sind sie neuer, werden sie geschrieben. Sonst wäre ja der Gesammte Datensatz des "Herr Meier" sollange gespeert, wie er in der Maske steht.

              Viele Grüsse gary

              @Rouven,

              Danke für die gezeigten Links (ACID). Ist doch sehr komplexe Materie. Ist tatsächlich eine Wissenschaft für sich. Allein die Backup und Sicherungen. Oder Wenn mehrere Leute verschiedene Aktionen kurz hintereinander ausführen wollen. Da laufen Befehlslisten auf, die irgendwo gepuffert werden müssen...
              Undundund...

              Viele Grüsse gary

      2. Hello,

        Ähm..., nehmen wir mal einen Riesenkonzern wie die Telekom. Millionen von Kunden. Herr X aus dem Ort Y meldet seinen Telefonanschluss ab. Der Sachbearbeiter sucht Herr X heraus und setzt z. B. seinen Kundenstatus auf inaktiv. Jetzt springt die Datenbank zu Herr X, ändert den Status, und springt wieder an die stelle in der DB, an dem die Änderung hineingeschrieben werden muss. Natürlich sind heutige Rechner zweifelsfrei schnell. Nur bei Millionen von Kunden Kann ja der Sachbearbeiter ne Tasse Kaffe trinken gehen, bis das System damit fertig ist. Bist du wirklich sicher, das die DB das hintereinander macht?

        Bitte löse dich von der Vorstellung primitiver Dateisysteme. Ein einfaches Dateisystem alleine erfüllt noch nicht mal die Grundvoraussetzung an Datenbanken (siehe ACID). Eine Datenbank zu entwickeln ist im wahrsten Sinne des Wortes eine Wissenschaft für sich. Datenbanken verfügen über umfangreiche Speicherstrukturen (-> warum in die Datei schreiben, wenn der Speicher doch schneller ist), Clusterfähigkeit (ein einzelner Rechner würde einer Telekom nicht sehr weit helfen, eine Datenbank muss gleichzeitig auf vielen Rechnern laufen), Zugriffspfad (Datenbestände haben Ausmaße, die man nicht mehr effizient durch einfaches lineares suchen abarbeiten kann), Kompressionsverfahren (warum denn in 100 Datensätzen den Satz "Sehr geehrter Herr" ausschreiben, wenn man das einmal machen kann), ...
        Transactional Information Systems von Gottfried Vossen ist ein ziemlich umfangreiches Buch, was sich mit Zielen und Implementierungsansätzen in DBMS beschäftigt. Das ist einerseits DIE Materie, andererseits nur die Oberfläche.
        Ansonsten empfehle ich tatsächlich Vorlesungsfolien von den Unis, da bekommst du auch einen Einblick. Aber nochmal, das ist eine hochkomplexe Materie, wenn man sie auf Dateien, Suchen, Schreiben, fixe Satzbreiten etc. herunterbricht, dann hat man allenfalls eine Veranschaulichung...

        MfG
        Rouven

        --
        -------------------
        sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
        Konsens ist kein Beweis  --  John Naisbitt
        1. Bitte löse dich von der Vorstellung primitiver Dateisysteme. Ein einfaches Dateisystem alleine erfüllt noch nicht mal die Grundvoraussetzung an Datenbanken. (...)

          Nunja, das stimmt natürlich. Aber ich denke, um sich klarzumachen, wie das ganze überhaupt im Ansatz funktioniert, sollte man diese ganzen Optimierungsprobleme ersteinmal vernachlässigen und sich wirklich nur auf die Grundkonzepte konzentrieren.

  3. Hallo gary,

    Man kann eine Datei gleichzeitig mehrmals öffnen und auch lesen und schreiben.
    Natürlich gehen dabei normalerweise Daten kaputt, daher muss man die Datei so aufbauen, dass man sinnvoll Bereiche unabhängig voneinander verändern kann.
    Einfaches Beispiel eine Tabelle die Produkten einen Preis zuordnet:
    1 xxxxxxPKW xxxx123
    2 xxxxxHaus xxx1234
    3 xBrötchen xxxxx34
    Dadurch dass die Werte alle gleich lang sind (Leerstellen mit x markiert) kann man problemlos für Datensatz 3 und 1 einen Wert gleichzeitig ändern.
    Wenn man große Datenbereiche mit veränderlicher Länge hat, wird es schwieriger. Da braucht man vielleicht Mechanismen, wie sie Dateisysteme verwenden o.ä.
    Zusätzlich zu solchen Formaten für die Datenspeicherung hat man dann noch Indizes (B-Trees u.ä.) um schnell Einträge zu verwenden. Außerdem kann man natürlich teile der Datenbank im Arbeitsspeicher cachen, wo man auch gleichzeitig Daten ändern kann.

    Datenbanken arbeiten natürlich parallel, dabei wird sicher auch echt gleichzeitig Information geschrieben (das geht natürlich erst so richtig, wenn die Daten über mehrere Festplatten verteilt sind oder im Arbeitsspeicher liegen).
    Das zu organisieren ist natürlich extrem aufwendig, vor allem wenn nicht nur das Datenformat konsistent bleiben muss, sondern auch auf höherer Ebene Konsistenz und Transaktionssicherheit gewährleistet werden muss.

    Grüße

    Daniel