Ich glaube, ich verstehe unter Sharding, dass Sie Ihre in Scheiben geschnittenen Daten (die Shards) wieder in ein einfach zu handhabendes Aggregat umwandeln, das im Kontext sinnvoll ist. Ist das richtig?
Update : Ich denke , ich bin hier zu kämpfen. Meiner Meinung nach sollte die Anwendungsebene kein Geschäft damit haben, zu bestimmen, wo Daten gespeichert werden sollen. Bestenfalls sollte es sich um einen Shard-Client handeln. Beide Antworten beantworteten das Was, aber nicht das Warum ist es wichtig. Welche Auswirkungen hat es außerhalb der offensichtlichen Leistungssteigerungen? Reichen diese Gewinne aus, um die MVC-Verletzung auszugleichen? Ist Sharding vor allem bei sehr großen Anwendungen wichtig oder gilt es für kleinere Anwendungen?
database
terminology
ojblass
quelle
quelle
Antworten:
Sharding ist nur ein anderer Name für "horizontale Partitionierung" einer Datenbank. Vielleicht möchten Sie nach diesem Begriff suchen, um ihn klarer zu gestalten.
Aus Wikipedia :
Weitere Informationen zum Sharding:
Update: Sie werden MVC nicht brechen. Die Ermittlung des richtigen Shards, in dem die Daten gespeichert werden sollen, wird von Ihrer Datenzugriffsschicht transparent erledigt. Dort müssten Sie den richtigen Shard anhand der Kriterien ermitteln, anhand derer Sie Ihre Datenbank sharden. (Da Sie die Datenbank basierend auf einigen konkreten Aspekten Ihrer Anwendung manuell in verschiedene Shards zerlegen müssen.) Dann müssen Sie beim Laden und Speichern der Daten aus / in die Datenbank vorsichtig sein, um den richtigen Shard zu verwenden.
Vielleicht macht dieses Beispiel mit Java-Code etwas klarer (es geht um das Hibernate Shards- Projekt), wie dies in einem realen Szenario funktionieren würde.
Um das "
why sharding
" anzusprechen : Es ist hauptsächlich für sehr große Anwendungen mit vielen Daten gedacht . Erstens hilft es, die Antwortzeiten für Datenbankabfragen zu minimieren. Zweitens können Sie billigere "Low-End" -Maschinen zum Hosten Ihrer Daten anstelle eines großen Servers verwenden, was möglicherweise nicht mehr ausreicht.quelle
Wenn Sie Fragen an ein DBMS haben, für das die Lokalität stark eingeschränkt ist (z. B. wenn ein Benutzer nur Auswahlen mit einem 'where username = $ my_username' auslöst), ist es sinnvoll, alle Benutzernamen, die mit AM beginnen, auf einem Server und alle in Neuseeland zu platzieren auf dem anderen. Auf diese Weise erhalten Sie für einige Abfragen eine nahezu lineare Skalierung.
Lange Rede, kurzer Sinn: Beim Sharding werden Tabellen im Grunde genommen auf verschiedene Server verteilt, um die Last gleichmäßig auf beide zu verteilen.
Natürlich ist es in der Realität viel komplizierter. :) :)
quelle
Sharding ist eine horizontale ( zeilenweise ) Datenbankpartitionierung im Gegensatz zu einer vertikalen ( spaltenweisen ) Partitionierung, bei der es sich um Normalisierung handelt . Es trennt sehr große Datenbanken in kleinere, schnellere und einfacher zu verwaltende Teile, sogenannte Data Shards. Es ist ein Mechanismus, um verteilte Systeme zu erreichen.
Warum brauchen wir verteilte Systeme?
Weitere Informationen finden Sie hier: Vorteile der verteilten Datenbank
Wie hilft Sharding dabei, ein verteiltes System zu erreichen?
Sie können einen Suchindex in N Partitionen partitionieren und jeden Index auf einen separaten Server laden. Wenn Sie einen Server abfragen, erhalten Sie 1/9 der Ergebnisse. Um eine vollständige Ergebnismenge zu erhalten, verwendet ein typisches verteiltes Suchsystem einen Aggregator , der die Ergebnisse von jedem Server sammelt und kombiniert. Ein Aggregator verteilt auch Abfragen auf jeden Server. Dieses Aggregatorprogramm heißt in der Big-Data-Terminologie MapReduce . Mit anderen Worten, Distributed Systems = Sharding + MapReduce (obwohl es auch andere Dinge gibt).
Eine visuelle Darstellung unten.
quelle
Sharding ist genau dann ein Problem, wenn Ihre Anforderungen über das hinausgehen, was von einem einzelnen Datenbankserver bereitgestellt werden kann. Es ist ein Swell-Tool, wenn Sie über Shardable-Daten verfügen und unglaublich hohe Anforderungen an Skalierbarkeit und Leistung haben. Ich würde vermuten, dass ich in meinen gesamten 12 Jahren als Softwareprofi auf eine Situation gestoßen bin, die vom Sharding hätte profitieren können. Es ist eine fortschrittliche Technik mit sehr begrenzter Anwendbarkeit.
Außerdem wird die Zukunft wahrscheinlich etwas lustiges und aufregendes sein, wie eine massive Objekt- "Wolke", die alle potenziellen Leistungsbeschränkungen beseitigt, oder? :) :)
quelle
Sharding wurde ursprünglich von Google-Ingenieuren geprägt, und Sie können sehen, dass es beim Schreiben von Anwendungen in Google App Engine ziemlich häufig verwendet wird. Da die Menge der Ressourcen, die Ihre Abfragen verwenden können, stark eingeschränkt ist und die Abfragen selbst strengen Einschränkungen unterliegen, wird das Sharding von der Architektur nicht nur gefördert, sondern fast erzwungen.
Ein weiterer Ort, an dem Sharding verwendet werden kann, besteht darin, Konflikte mit Datenentitäten zu reduzieren. Beim Erstellen skalierbarer Systeme ist es besonders wichtig, auf die Daten zu achten, die häufig geschrieben werden, da sie immer den Engpass darstellen. Eine gute Lösung besteht darin, diese bestimmte Entität abzusplittern, in mehrere Kopien zu schreiben und dann die Gesamtsumme zu lesen. Ein Beispiel für diesen "Sharded Counter Wrt GAE: http://code.google.com/appengine/articles/sharding_counters.html
quelle
Sharding ist mehr als nur eine horizontale Partitionierung. Nach dem Wikipedia - Artikel ,
Ebenfalls,
quelle
Dies ist eine gute Regel, aber wie die meisten Dinge nicht immer richtig.
Wenn Sie Ihre Architektur erstellen, beginnen Sie mit Verantwortlichkeiten und Kooperationen. Sobald Sie Ihre funktionale Architektur festgelegt haben, müssen Sie die nicht funktionalen Kräfte ausgleichen.
Wenn eine dieser nicht funktionalen Kräfte die massive Skalierbarkeit ist, müssen Sie Ihre Architektur anpassen, um dieser Kraft Rechnung zu tragen, auch wenn dies bedeutet, dass Ihre Datenspeicherabstraktion jetzt in Ihre Anwendungsebene gelangt.
quelle