Montag, 29. Oktober 2007

Ist Sharding dasselbe wie Partitionierung und Föderation?

Original: http://www.royans.net/arch/2007/09/09/sharding-different-from-partitioning-and-federation/ 9. September 2007 12:34
Autor: Royans Tharakan
Übersetzung: Sebastian Wallroth

Dieses Wort "Sharding"... ich höre es immer öfter. Es geht um wie ein Lauffeuer. Theo Schlossnagle, der Autor von "Skalierbare Internetarchitekturen", vertritt die Ansicht, dass ein föderiertes Informationssystem ein Form von Partitionierung und dass Sharding wiederum nichts anderes als eine Form von Partitionierung und Föderation ist. Schlossnagle meint, dass Sharding bereits seit sehr langer Zeit angewandt wird.

Ich bin weder beruflich noch privat Datenbankadministrator. Um also die Unterschiede zu verstehen, habe ich ein bisschen geforscht und ein paar interessante Artikel gefunden.

Das erste Mal hörte ich von "Sharding" im Blog "mySQL DBA" in einem Artikel über einen unorthodoxen Datenbankentwurf (Teil I und Teil II). Hier ist das exakte Zitat:
Teilt man die Benutzerdaten so auf, dass Benutzer A auf dem einen Server
existiert, während Benutzer B auf einem anderen Server existiert, so hält jeder
Server in diesem föderierten Modell einen Splitter (shard) der Daten vor.
Vor ein paar Monaten griff Highscalability.com das Thema Sharding auf und ließ es so aussehen (möglicherweise unabsichtlich) als ob Sharding eigentlich etwas anderes ist als Föderation und Partionierung. Todds Artikel weist darauf hin, dass Flickr Sharding verwendet. Die Suche nach Flickrs Architektur führte mich zu Colin Charles Artikel über das föderierte Informationssystem bei Flickr: Eine Führung durch die Architektur von Flickr, in der er Shards als eine Komponente des föderierten Schlüssels erwähnt. Auch er jedoch nennt Sharding nichts Neues. Zitat:
Schlüsselkomponenten eines föderierten Informationssystems:
  • Shards: Meine Daten werden in meinem Shard gespeichert, aber die Aufzeichnung über eine ausgeführte Tätigkeit steht in deinem Shard. Beispiel: Man macht einen Kommentar in jemandes anderen Blog.
  • Global Ring: Das ist wie DNS, Du musst wissen, wo Du hin musst und wer kontrolliert, wohin Du gehst. Bei jedem Seitenaufruf wird im selben Moment berechnet, wo deine Daten sind.
  • PHP-Logik, um die Shards zu verbinden und die Daten konsistent zu halten (10 Zeilen Code - mit Kommentaren!)

Ausgehend von den Diskussionen in diesem und anderen Blogs scheinen "Shards" eher eine Terminologie zu sein, um Datenfragmente zu beschreiben, die über mehrere Datenbanken hinweg föderiert sind, als eine Architektur an sich. Ich denke, Theo Schlossnagles Argument ist triftig. Wenn jemand anderer Meinung ist, dann würde ich gern davon hören. Eine klarere Definition von Sharding im Unterschied zu Föderation würde ebenfalls sehr hilfreich sein.

Weitere Referenzen zum Thema Shards/Sharding

Kommentare:

Anonym hat gesagt…

Danke sehr. Der Artikel ist recht interessant und wird gut umschrieben. Sehr informativer blog.

Anonym hat gesagt…

Beim föderierten System sind die Teile atonom - eigene Systeme. Sharding als Sonderfall von Partitionierung ist horizontale paritionierung und noch genauer homogene horizontale paritionierung. Eine DB ist bereits horizontal partitioniert wenn sie bspw. mit CJDBC verschiedene Tabellen in verschiedenen Systemen ablegt. Beim Sharding haben Regionen, die shards eine gleiche Struktur.