Technologieaustausch

Datenbankverwaltung im Zeitalter von Big Data: Die Bedeutung des Datenbank-Shardings und der Trennung von Lesen und Schreiben

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Vorwort

Die Begriffe „Sharding“ und „Datenbanksplitting“ werden im Datenbankbereich häufig verwendet und beziehen sich meist auf ähnliche Konzepte, unterscheiden sich jedoch in Details. Unter Datenbank-Sharding versteht man in der Regel die Verteilung von Daten einer großen Datenbank auf mehrere kleinere Datenbanken, um die Leistung und Verwaltbarkeit zu verbessern. Unter Datenbankaufteilung hingegen versteht man im weiteren Sinne die Zerlegung eines Datenbanksystems in kleinere Teile, was Datenbank-Sharding oder andere Arten der Aufteilung, wie etwa Tabellen-Sharding, umfassen kann.

Hier sind die Unterschiede zwischen Sharding und Datenbankaufteilung:

BesonderheitDatenbank-ShardingDatenbankaufteilung
DefinitionVerteilen Sie Daten auf mehrere physische Datenbankinstanzen.Teilen Sie das Datenbanksystem in kleinere Einheiten auf.
ZweckVerbessern Sie Leistung, Skalierbarkeit und Fehlertoleranz.Verbessern Sie Leistung, Verwaltung und Skalierbarkeit.
TypBeinhaltet hauptsächlich horizontale und vertikale Aufteilung.Einschließlich Unterdatenbank, Untertabelle, horizontaler Aufteilung, vertikaler Aufteilung usw.
horizontal teilenEs handelt sich um eine Form des Shardings, bei der Daten nach Zeilen aufgeteilt werden.Wahrscheinlich Teil einer Datenbankaufteilung.
vertikal teilenEs handelt sich um eine Form des Shardings, bei der Daten nach Spalten aufgeteilt werden.Wahrscheinlich Teil einer Datenbankaufteilung.
Komplexität der ImplementierungEs ist eine höhere, zusätzliche Routing-Logik erforderlich.Dies hängt von der jeweiligen Aufteilungsmethode ab.
BeeinflussenDer Code der Anwendungsschicht muss möglicherweise geändert werden, um ihn an die Unterbibliothek anzupassen.Möglicherweise muss der Code der Anwendungsschicht geändert werden, um die Änderungen zu berücksichtigen.
BeispielSpeichern Sie die Daten verschiedener Benutzer in verschiedenen Datenbanken und ordnen Sie sie beispielsweise anhand des Hashwerts der Benutzer-ID unterschiedlichen Datenbanken zu. Teilen Sie eine große Tabelle in mehrere kleinere Tabellen auf oder teilen Sie Daten vertikal in verschiedene Tabellen oder Bibliotheken auf. Vertikale Aufteilung: Speichern Sie Benutzerinformationen und Bestellinformationen in verschiedenen Datenbanken. Horizontale Aufteilung: Speichern Sie die Bestelltabelle entsprechend dem Bestell-ID-Bereich in verschiedenen Datenbanken.

Beispiel einer Zweigbibliothek

  1. -- 分库示例:将订单信息按照用户ID的哈希值存储到不同的数据库
  2. -- 数据库1
  3. CREATE DATABASE orders_db_1;
  4. USE orders_db_1;
  5. CREATE TABLE orders (
  6. order_id INT PRIMARY KEY,
  7. user_id INT,
  8. total_amount DECIMAL(10, 2),
  9. order_date DATE
  10. );
  11. -- 数据库2
  12. CREATE DATABASE orders_db_2;
  13. USE orders_db_2;
  14. CREATE TABLE orders (
  15. order_id INT PRIMARY KEY,
  16. user_id INT,
  17. total_amount DECIMAL(10, 2),
  18. order_date DATE
  19. );

Beispiel für eine Datenbankaufteilung

  1. -- 垂直拆分示例:将用户信息表和订单信息表分离到不同的数据库
  2. -- 主数据库
  3. CREATE DATABASE main_database;
  4. USE main_database;
  5. -- 用户信息表
  6. CREATE TABLE users (
  7. user_id INT PRIMARY KEY,
  8. username VARCHAR(50),
  9. email VARCHAR(100)
  10. );
  11. -- 订单信息表
  12. CREATE DATABASE orders_database;
  13. USE orders_database;
  14. CREATE TABLE orders (
  15. order_id INT PRIMARY KEY,
  16. user_id INT,
  17. total_amount DECIMAL(10, 2),
  18. order_date DATE
  19. );

Datenbank-Sharding und Datenbank-Splitting werden in verschiedenen Szenarien eingesetzt, um spezifische Geschäftsanforderungen und technische Herausforderungen zu erfüllen:

SzenenDatenbank-ShardingDatenbankaufteilung
Das Datenvolumen ist zu großWenn die Datenmenge in einer einzelnen Datenbank die Speicher- oder Verarbeitungskapazitäten eines einzelnen Servers übersteigt.Wenn die Größe einer Datenbanktabelle die Abfrageleistung beeinflusst.
LeistungsengpassBei vielen gleichzeitigen Lese- und Schreibvorgängen kann eine einzelne Datenbank keinen ausreichenden Durchsatz bieten.Lese- und Schreibvorgänge für eine einzelne Tabelle werden langsamer, was sich auf die Reaktionszeit der Anwendung auswirkt.
SkalierbarkeitsanforderungenDie Datenbank muss horizontal erweitert werden, um die Leistung durch Hinzufügen weiterer Datenbankknoten zu verbessern.Daten müssen vertikal aufgeteilt werden, um die Belastung einer einzelnen Datenbank zu reduzieren und die Verwaltung zu vereinfachen.
Notfallwiederherstellung und WiederherstellungIn einer verteilten Umgebung können die Disaster-Recovery-Fähigkeit und die schnelle Wiederherstellung des Systems durch Sharding verbessert werden.Durch die Aufteilung der Datenbank können Sie Teile Ihrer Daten einfacher sichern und wiederherstellen.
Bezogen auf GeschäftslogikEs eignet sich nicht für Szenarien mit komplexen tabellenübergreifenden Abfragen, da die Netzwerklatenz und -komplexität nach dem Datenbank-Sharding zunehmen kann.Daten können entsprechend der Geschäftslogik aufgeteilt werden, sodass zusammengehörige Daten zusammen gespeichert werden und datenbankübergreifende Abfragen reduziert werden.
Anpassung der SystemarchitekturWenn die Systemarchitektur verteiltes Rechnen und umfangreiche Datenverarbeitung unterstützen muss.Wenn Datenstrukturen neu organisiert werden müssen, um eine bestimmte Abfrage oder Operation zu optimieren.
KostenkontrolleDurch Sharding können kostengünstige Hardware-Ressourcen genutzt werden, um die Gesamtbetriebskosten zu senken.Durch die Optimierung der Datenspeicherung und Zugriffsmuster können Speicher- und Rechenressourcen eingespart werden.
Datenisolation und SicherheitDie physische Isolierung von Daten kann durch geografisches Sharding erreicht werden, um regulatorische Anforderungen zu erfüllen.Für eine detailliertere Sicherheitskontrolle können die Daten nach Vertraulichkeit oder Zugriffshäufigkeit aufgeteilt werden.

      Obwohl sowohl Datenbank-Sharding als auch Datenbank-Splitting zur Lösung der oben genannten Probleme eingesetzt werden können, sind ihre Schwerpunkte unterschiedlich. Unterdatenbanken neigen eher dazu, die Speicherung und Verarbeitung großer Datenmengen zu lösen und die Skalierbarkeit und Notfallwiederherstellungsfähigkeiten des Systems zu verbessern. Bei der Datenbankaufteilung liegt der Schwerpunkt mehr auf der Optimierung der Datenorganisation und Zugriffsmuster sowie der Vereinfachung der Datenbankverwaltung.