Julia: Clustering von einer Tabelle?

Hallo Forum,

ich habe eine Frage zum Thema Clustering.

So wie ich verstanden habe, wird Clustering genutzt, um die zusammengehörende Daten physikalisch nebeneinander zu speichern.

Ich habe allerdings bisher die Anwendung von Clustering nur im Bezug auf mehrere Tabellen gesehen. Macht es auch Sinn, eine Tabelle in ein Cluster zu speichern? (Ich würde sagen ja, aber warum genau?). Und macht es Sinn dann trotzdem Sinn, eine (häufig selektierte) Spalte zu indexieren?

Schönen Dank im Voraus!

Julia

  1. Hello Julia,

    ich kann das nur aus Sicht eines "Museumswärters" beantworten.

    Eine herkömmliche HDD als Permanentspeichermedium ist üblicherweise in Spuren und Sektoren eingeteilt. Diese befinden sich dann ggf. auch noch auf mehreren Ebenen (Scheiben). Um nicht zuviele Verwaltungsinformationen (Marker und "Rasenstreifen") auf dem Medium unterbringen zu müssen, fasst man immer mehrere Sektoren zu einem Cluster zusammen. Wie groß der wird, stellt dein Fileservice-Programm bei der Partitionierung und Formatierung ein. Übliche Größen sind heute z. B. 8kB pro Cluster. Wenn Du eine neue Datei anfängst, ist im Datenbereich der Platte immer mindestens ein Cluster weg, auch wenn nur ein Byte (oder keines) darin benutzt wird. Zum Lesen eines Bytes aus dem Cluster wird auch der gesamter Cluster in den Buffer geleden. Zum Schreiben eines Bytes muss er ebenfalls zuerst gelesen werden, dann im Buffer manipuliert und anschließend komplett zurückgeschrieben werden. [Bitte hier nicht auf die Speuialitäten von NTFS oder EXT3/4 eingehen, das würde zu weit führen]

    Kurz gesagt: die Daten eines Clusters liegen ohnehin im Lesepuffer.

    Machst Du den Cluster so groß, dass ganze Tabellen hineinpassen, kannst Du im Prinzip den Speicher immer sequentiell durchsuchen lassen nach den gewünschten Treffern. alle anderen Regeln wurden schon in deinem letzten Thread diskutiert.

    Jetzt gibt es aber unterschiedlich aufgebaute Tabellen. Die einfachste Art mit der meisten "Luft" zwischen den Daten wäre feste Feldlänge, feste Satzlänge. Ein DS hat benötigt immer dieselbe Anzahl Bytes. Die Position der DS und der Felder lässt sich also berechnen.

    Dann gibt es den Aufbau mit wahlfreier Feldlänge und fester Satzbreite. Die Postion der Datensätze lässt sich damit zwar berechnen, aber nicht, wo die Felder anfangen und aufhören. Außerdem muss man eine intelligente Regelung dafür finden, dass die Summe aller Feldlängen die Satzlänge nicht überschreitet.

    Ganz weit verbreitet sind "Textdateien". Da werden alle Felder eines Satzes immer sequentiell hintereinander geschrieben und die Datensätze auch. Es gibt spezielle Zeichen für "Feldende" und "Satzende", die nicht ohne Weiteres in den Daten auftreten dürften. Bei solchen Dateien kann man gar nichts mehr berechnen.

    Nun kann es aber sinnvoll sein, eine Extratabelle zu führen, in der man sich die Anfangspositionen der Datensätze merkt. Das ist dann schon so ähnlich, wie ein Index oder besser wie ein RAT (Record Allocation Table).

    Wenn Du dir mal eine MySQL-Tabelle im MyISAM-Format greifst und die mit einem Hexeditor anschaust, wird dir einiges klar werden. Nimm am Anfang nur eine einfache Tabelle mit einer Id (INT) und einen Datenfeld (Char 20). Wenn Du sie angesehen hast, baue sie um und füge ein Datenfeld (VarChar 100) hinzu und schreibe auch etwas rein(!). Du wirst sehen, dass man da schon sehr genau hinsehen muss, welche Daten zusammengehören (Datensätze bilden).

    Das DBMS selber sollte sich aber nach Möglichkeit an Clustergrenzen halten für seine Knoten- und Blattseiten, bzw. seine sequentiellen Blöcke.

    Liebe Grüße
    Tom S.

    --
    Es gibt nichts Gutes, außer man tut es!
    Das Leben selbst ist der Sinn.
    1. Hallo Tom S.,

      viele Dank für Deine ausführliche Antwort!

      Ich finde es sehr sinnvoll, auch mal die Hintergründe der Materie zu verstehen, mit der man sich beschaftigt.

      Noch mal danke und viele Grüße

      Julia

      1. Hello,

        Ich finde es sehr sinnvoll, auch mal die Hintergründe der Materie zu verstehen, mit der man sich beschaftigt.

        Im Prinzip haben Regina und CK dir auch nichts anderes erzählt; sie haben nur im ersten Stock angefangen, ich im Keller ;-)

        Liebe Grüße
        Tom S.

        --
        Es gibt nichts Gutes, außer man tut es!
        Das Leben selbst ist der Sinn.
    2. Hallo TS,

      dass es einen zwingenden Zusammenhang zwischen Sektor-Clustern einer HDD und dem Clustering in einer SQL DB gibt, wäre mir neu.

      Ein Betriebssystem (genauer: File System) bildet Cluster wenn es Sektoren nicht einzeln adressieren kann. Ursache sind zu kleine Datentypen (z.B. 16 Bit statt 32 Bit) und eine Technik, die die Möglichkeiten der Software überholt hat.

      Clustering in der DB bedeutet meines Wissens, dass die Datensätze im B-Tree des Index liegen. Ein Index Seen liefert damit sofort den DB-Satz, statt einer Record-Nummer einer Datentabelle. Dass man mehrere Tabellen clustern kann wusste ich bisher nicht, das mag eine Oracle Besonderheit sein...

      Datenblöcke der Tablespaces an physikalischen Clustern auszurichten ist eine technische Optimierung des DBMS, damit solltest du als Benutzer nichts zu tun bekommen.

      Rolf

      --
      sumpsi - posui - clusi
      1. Hello,

        dass es einen zwingenden Zusammenhang zwischen Sektor-Clustern einer HDD und dem Clustering in einer SQL DB gibt, wäre mir neu.

        Ich rate einfach mal: vielleicht bist Du zu jung?

        Es gab eine Zeit, in der ein Datenbankserver auch die absolute Kontrolle über alle Speichermedien übernehmen wollte, also selber den Fileservice übernommen hat. Und ich kann mir auch nicht vorstellen, dass dieser Anspruch vollständig obsolet geworden ist für High-Performance Systeme.

        Alleine von der OS-Sicht betrachtet kennst Du vielleicht noch das Elevator-Seeking von Novell, was dieses (Netzwerk-)Betriebssystem damals im Vergleich mit anderen sehr schnell machte.

        Im Zeitalter von RAID, Striping u. ähnlichen Techniken muss man selbstverständlich immer überlegen, welche Aufgabe man in welche Schicht verbannt, also ob man die gewachsene Schichtentrennung akzeptiert, oder aber alle Overheads durch redundante Plausibilitätskontrollen beseitigt und eine Black-Box baut, die nach außen mehrere Schichten überbrückt - aber dafür sehr schnell ist.

        Liebe Grüße
        Tom S.

        --
        Es gibt nichts Gutes, außer man tut es!
        Das Leben selbst ist der Sinn.
        1. Hallo TS,

          ich bin 52,97 Jahre. Und natürlich weiß ich dass manche DB Server das File System umgehen wollen.

          Netware habe ich selbst schon aufgesetzt, aber alles vergessen 😟

          Ich sprach lediglich von dem zwingenden Zusammenhang, und davon, dass Clustering auf HDD Ebene und auf DB Ebene verschiedene Dinge sind. Wie es CK auch tat.

          Rolf

          --
          sumpsi - posui - clusi
          1. Hello,

            Ich sprach lediglich von dem zwingenden Zusammenhang, und davon, dass Clustering auf HDD Ebene und auf DB Ebene verschiedene Dinge sind. Wie es CK auch tat.

            Es sind nicht wirklich verschiedene Dinge. Man versucht in beiden Fällen, zusammengehörige Daten auch physisch zusammenzuhalten.

            Das ist am effektivsten, wenn man dies durch alle Schichten hindurch tut. Am besten gestaltet man das aber so, dass jede höhere Schicht auch die Fähigkeiten (Funktionen, Methoden) der darunterliegenden nutzen kann, ohne selber etwas zu emulieren, dass es irgendwo weiter unten schon einmal generisch gab.

            Dazu bedarf es inteligenter Betriebssystme, intelligenter Filesysteme, intelligenter Schnittstellen, intelligenter Applikationen und selbstverständlich auch intelligenter (und nicht eloquenter) Programmierer!

            :-)

            Liebe Grüße
            Tom S.

            --
            Es gibt nichts Gutes, außer man tut es!
            Das Leben selbst ist der Sinn.
  2. Hallo Forum,

    ich habe eine Frage zum Thema Clustering.

    So wie ich verstanden habe, wird Clustering genutzt, um die zusammengehörende Daten physikalisch nebeneinander zu speichern.

    Also ich kenne zu Datenbank und Cluster nur das hier.

    Meinst Du was anderes?

    1. Hallo Regina,

      Also ich kenne zu Datenbank und Cluster nur das hier.

      Meinst Du was anderes?

      Auch MySQL hat index cluster ;-)

      LG,
      CK

  3. Hallo Julia,

    Vorsicht 😉 Clustering ist ein viel genutzter Begriff. Oracle nutzt den anders als andere DBMS, sage also am besten immer dazu, auf welches DBMS du dich beziehst.

    So wie ich verstanden habe, wird Clustering genutzt, um die zusammengehörende Daten physikalisch nebeneinander zu speichern.

    Bei den anderen DBMS wird der Begriff „Clustering“ genutzt, um den Vorgang zu beschreiben, dass die physikalische Anordnung der Daten auf der Festplatte sich nach einem speziellen Index richtet, so dass der Zugriffspfad über diesen Index dann besonders schnell ist.

    Bei Oracle heißt das „Index Cluster.“ Der zweite Mechanismus nennt sich „Table Cluster,“ und hier werden die Daten mehrerer Tabellen beieinander gespeichert, ja.

    Und dann kann man beides noch kombinieren, dass sind dann „Index Table Cluster.“

    Ich habe allerdings bisher die Anwendung von Clustering nur im Bezug auf mehrere Tabellen gesehen.

    Nein, Clustering wird gerne auch bei einzelnen Tabellen gemacht, um bestimmte Zugriffspfade zu beschleunigen.

    Macht es auch Sinn, eine Tabelle in ein Cluster zu speichern? (Ich würde sagen ja, aber warum genau?).

    Das kann sinnvoll sein, ja. Wenn ich z.B. ein in einer Tabelle einen Index auf einem Feld habe, und die meisten Zugriffe auf diese Tabelle sich auf dieses Feld beziehen und dieser Zugriff besonders schnell sein muss, dann kann es sinnvoll sein, die Tabelle in einem Index-Cluster zu speichern, der sich auf diesen Index bezieht.

    Und macht es Sinn dann trotzdem Sinn, eine (häufig selektierte) Spalte zu indexieren?

    Zusätzliche Indizes stören nicht beim Clustering und umgekehrt stört Clustering den Index nicht. Wenn du sie benötigst, kannst du sie verwenden. Ob der Index dann sinnvoll ist, muss im Einzelfall erwogen werden.

    LG,
    CK

    1. Hallo Christian,

      vielen Dank für Deine sehr hilfreiche Antwort!

      Wir haben in der Tat meistens mit Oracle gearbeitet, aber die Unterscheidung zwischen „Index Cluster“, „Table Cluster“ und „Index Table Cluster“ waren mir nicht bewusst.

      Auf jeden Fall ist meine Frage beantwortet und ich verstehe jetzt auch die Hintergründe davon.

      Noch mal danke und viele Grüße

      Julia

  4. Hallo zusammen,

    ich habe heute meine mündliche Prüfung in relationalen Datenbanken abgelegt (und zwar mit 1,0! ☺) und möchte mich noch mal für Eure Unterstützung bedanken!

    Viele Grüße

    Julia

    1. Hallo Julia,

      ich habe heute meine mündliche Prüfung in relationalen Datenbanken abgelegt (und zwar mit 1,0! ☺) und möchte mich noch mal für Eure Unterstützung bedanken!

      Herzlichen Glückwunsch! 🎊🎉🍾

      LG,
      CK