it-swarm.com.de

Datenbankpartitionierung - Horizontal vs. Vertikal - Unterschied zwischen Normalisierung und Zeilensplit?

Ich versuche, die verschiedenen Konzepte von Database Partitioning zu verstehen, und das habe ich davon verstanden:

Horizontal Partitioning/Sharding: Aufteilen einer Tabelle in eine andere Tabelle, die eine Teilmenge der Zeilen enthält, die sich in der Ausgangstabelle befanden (ein Beispiel, das ich beim Aufteilen einer Benutzertabelle nach Kontinent wie einer Untertabelle häufig gesehen habe) für Nordamerika ein anderes für Europa usw.). Jede Partition befindet sich an einem anderen physischen Ort (versteht 'Maschine'). Wenn ich die Partition verstanden habe, sind Horizontal Partitioning und Sharding genau dasselbe (?).

Vertical Partitioning: Was ich verstanden habe ( http://technet.Microsoft.com/de-de/library/ms178148%28v=sql.105%29.aspx ), gibt es zwei Arten von Vertikale Partitionierung:

  • Normalization (besteht darin, Redundanzen aus der Datenbank zu entfernen, indem Tabellen aufgeteilt und mit einem Fremdschlüssel verknüpft werden). 

  • Reihenaufteilung, hier ist was ich nicht verstehe, was ist der Unterschied zwischen Normalisierung und Reihenaufteilung? Worin unterscheiden sich diese beiden Techniken?

Ich habe auch in diesem Beitrag gelesen ( Unterschied zwischen horizontaler und vertikaler Skalierung für Datenbanken ), dass der Unterschied zwischen horizontaler Partitionierung und vertikaler Partitionierung darin besteht, dass Sie beim ersten skalieren, indem Sie weitere Maschinen hinzufügen, während Sie beim zweiten skalieren Wenn Sie Ihrer vorhandenen Maschine mehr Leistung (CPU, RAM) hinzufügen, ist dies eine korrekte Definition? Ich dachte, dass der Unterschied zwischen den beiden Techniken core darin besteht, wie Sie Ihre Tabellen aufteilen.

Es tut mir leid für die vielen Fragen, aber ich bin etwas verwirrt, da viele verschiedene Websites, auf die ich gestoßen bin, verschiedene Dinge sagen.

Jede Hilfe zur Klärung wäre sehr dankbar. Jeder Link zu einer klaren und einfachen Demonstration mit ein paar Tabellen wäre ebenfalls sehr hilfreich.

32
dukable

Partitionierung ist ein eher allgemeines Konzept und kann in vielen Zusammenhängen angewendet werden. Bei der Partitionierung von relationalen Daten bezieht sich das normalerweise darauf, Ihre Tabellen entweder zeilenweise (horizontal) oder spaltenweise (vertikal) zu zerlegen.

Vertikale Partitionierung, auch Zeilenaufteilung genannt, verwendet dieselben Aufteilungstechniken wie die Datenbank-Normalisierung. Normalerweise bezieht sich der Begriff (vertikal/horizontal) Datenpartitionierung auf eine physische Optimierung, wohingegen Normalisierung eine Optimierung auf der Ebene conceptual ist.

Da Sie nach einer einfachen Demonstration fragen - nehmen Sie an, Sie haben eine Tabelle wie diese:

create table data (
    id integer primary key, 
    status char(1) not null, 
    data1 varchar2(10) not null, 
    data2 varchar2(10) not null);

Eine Möglichkeit, data vertical : zu partitionieren:

create table data_main (
    id integer primary key,
    status char(1) not null,
    data1 varchar2(10) not null );

create table data_rarely_used (
    id integer primary key,
    data2 varchar2(10) not null,
    foreign key (id) references data_main (id) );

Diese Art der Partitionierung kann zum Beispiel angewendet werden, wenn Sie in Ihren Abfragen selten Spalten-Daten2 benötigen. Die Partition data_main benötigt weniger Speicherplatz. Daher sind vollständige Tabellenscans schneller und es ist wahrscheinlicher, dass sie in den Seitencache des DBMS passen. Der Nachteil: Wenn Sie alle Spalten von data abfragen müssen, müssen Sie unbedingt die Tabellen verknüpfen, was teurer ist als das Abfragen der ursprünglichen Tabelle.

Beachten Sie, dass Sie die Spalten auf dieselbe Weise aufteilen, als würden Sie Tabellen normalisieren. In diesem Fall konnte data jedoch bereits auf 3NF (und sogar BCNF und 4NF) normiert werden, Sie entscheiden sich jedoch aus Gründen der physikalischen Optimierung für eine weitere Aufteilung.

Eine Möglichkeit, data horizontal mit Oracle-Syntax zu partitionieren:

create table data (
    id integer primary key, 
    status char(1), 
    data1 varchar2(10), 
    data2 varchar2(10) )
    partition by list (status) ( 
       partition active_data values ( 'A' ),
       partition other_data values(default) 
    );

Dies würde das DBMS anweisen, die Tabelle data intern in zwei Segmenten (wie zwei Tabellen) zu speichern, abhängig vom Wert der Spalte status. Diese Partitionierungsmethode data kann zum Beispiel angewendet werden, wenn Sie normalerweise nur Zeilen einer Partition abfragen, z. B. Status-A-Zeilen (nennen wir sie als aktive Zeilen). Wie zuvor sind vollständige Scans schneller (insbesondere wenn nur wenige aktive Zeilen vorhanden sind), die aktiven Zeilen (bzw. die anderen Zeilen) werden zusammenhängend gespeichert (sie werden nicht um Seiten verteilt, die sie mit anderen Zeilen teilen) Statuswert, und es ist wahrscheinlicher, dass sich die aktiven Zeilen im Seiten-Cache befinden. 

26
Fabian

Horizontale Partitionierung in der Datenbank

Behalten alle Felder, die EG: Tabelle Employees hat 

  • ich würde,
  • name,
  • Geografische Position ,
  • email,
  • bezeichnung,
  • telefon

EG: 1. Halten Sie alle Felder und verteilen Sie Datensätze auf mehreren Rechnern.Say id = 1-100000 oder 100000-200000 Datensätze auf jeweils einem Rechner und verteilen sich auf mehrere Rechner.

EG: 2.Zur Aufbewahrung separater Datenbanken für Regionen EG: Asien-Pazifik, Nordamerika

Schlüssel: Kommissionierreihensatz basierend auf Kriterien

Vertikale Partitionierung in der Datenbank

Es ist vergleichbar mit der Normalisierung, bei der dieselbe Tabelle in mehrere Tabellen unterteilt und bei Bedarf mit Verknüpfungen verwendet wird.

EG: id, name, designation wird in eine Tabelle eingefügt und
phone, email, auf die möglicherweise nicht häufig zugegriffen wird, werden in eine andere eingefügt.

Taste: Auflistung von Spalten anhand von Kriterien.

  • Horizontale/Vertikale Skalierung unterscheidet sich von der Partitionierung

Horizontale Skalierung:

es geht darum, das Hinzufügen von mehr Maschinen zu die Verbesserung der Reaktionsfähigkeit und Verfügbarkeit eines Systems einschließlich der Datenbank zu ermöglichen. Die Idee ist, die Arbeitslast auf mehrere Maschinen zu verteilen.

Vertikale Skalierung:

es geht um das Hinzufügen zusätzlicher Funktionen in Form von CPU, Arbeitsspeicher zu vorhandenen Maschinen oder zu vorhandenen Maschinen, um die Reaktionsfähigkeit und Verfügbarkeit jedes Systems, einschließlich Datenbank, zu verbessern. Eine virtuelle Maschine kann virtuell konfiguriert werden, anstatt reale physische Maschinen hinzuzufügen.

Sameer Sukumaran

19

Die Probleme mit einer einzelnen Datenbank treten auf, wenn sie sehr groß werden. Daher ist eine Partitionierung erforderlich, um den Suchraum zu reduzieren, sodass erforderliche Aktionen schneller ausgeführt werden können. Es stehen verschiedene Partitionsstrategien zur Verfügung, z. B. horizontale Partitionierung, vertikale Partitionierung, Hash-basierte Partitionierung, Lookup-basierte Partitionierung. Horizontale, vertikale Skalierung ist ein anderes Konzept im Vergleich zu diesen Strategien.

  1. Horizontale Partitionierung : Es teilt gegebene Tabellen/Sammlungen in mehrere Tabellen/Sammlungen auf der Grundlage einiger Schlüsselinformationen auf, die dabei helfen können, die richtige Tabelle zu erhalten, da bei der horizontalen Partitionierung mehrere Tabellen auf verschiedenen Knoten/Maschinen vorhanden sind. zB: Informationen zu regionalen Nutzern.

  2. Vertikale Partitionierung : Unterteilt Spalten in mehrere Teile, wie in einer der obigen Antworten erwähnt, zB: Spalten, die sich auf Benutzerinformationen, Vorlieben, Kommentare, Freunde usw. in Social Networking-Anwendungen beziehen.

  3. Hash-basierte Partitionierung : Verwendet die Hash-Funktion, um die Tabelle/den Knoten zu bestimmen und Schlüsselelemente als Eingabe für die Hash-Generierung zu verwenden. Wenn wir die Anzahl der Tabellen ändern, ist eine erneute Anordnung der Daten erforderlich, was kostspielig ist. Es gibt also ein Problem, wenn Sie weitere Tabellen/Knoten hinzufügen möchten.

  4. Lookup-basierte Partitionierung : Es wird eine Lookup-Tabelle verwendet, die bei der Umleitung zu verschiedenen Tabellen/Knoten-Basis für gegebene Eingabefelder hilft. Bei diesem Ansatz können wir problemlos neue Tabellen/Knoten hinzufügen.

Horizontale Skalierung vs. vertikale Skalierung : Wenn wir eine Anwendung entwerfen, müssen wir auch an die Skalierung denken. Wie werden wir in Zukunft viel Verkehr abwickeln? Wir müssen in Bezug auf Speicherverbrauch, Latenz, CPU-Auslastung, Fehlertoleranz und Ausfallsicherheit denken. Vertikale Skalierung fügt mehr Ressourcen hinzu, z. B. CPU, Speicher für einen einzelnen Computer, damit der eingehende Datenverkehr verarbeitet werden kann. Es gibt jedoch Einschränkungen bei diesem Ansatz. Sie können nicht mehr Ressourcen als bestimmte Grenzen hinzufügen. Durch die horizontale Skalierung kann der kommende Datenverkehr auf mehrere Knoten verteilt werden. Es muss einen Load-Balancer an der Frontseite haben, der im Wesentlichen den Verkehr handhabt und den Verkehr zu einem beliebigen Knoten navigiert. Durch die horizontale Skalierung können Sie eine ausreichende Anzahl von Servern hinzufügen, aber Sie benötigen auch diese vielen Knoten.

0
Bhagwati Malav

Der Unterschied zwischen Normalisierung und Spaltung liegt in dem Zweck, dies zu tun.

Der Hauptzweck der Normalisierung besteht darin, redundante Daten zu entfernen. Where as Der Zweck der Zeilenaufteilung besteht darin, weniger erforderliche Daten zu trennen.

beispiel: - Angenommen, Sie haben eine Tabelle All_Details mit Spalten-ID, Emp_name, Emp_Adresse, Emp_phNo, Emp_other_data, Company_Name, Company_Address, Company_revenue.

Wenn Sie nun die Tabelle normalisieren möchten, erstellen Sie zwei neue Tabellen Employee_Details und Company_Details und behalten einen Fremdschlüssel von company_id in der Tabelle Employee_Details. Auf diese Weise werden redundante Unternehmensdaten entfernt.

Lassen Sie uns jetzt über das Zeilensplittern sprechen. Angenommen, Sie greifen auch nach der Normalisierung nur auf employee_name und emp_phNo zu, aber Sie greifen nicht so häufig auf emp_address und emp_other_data zu. Um die Leistung zu verbessern, teilen Sie die Employee_Details-Tabelle in zwei Tabellen auf. table1 enthält die häufig benötigten Daten (employee_name und emp_phNo) und table2 die weniger häufig benötigten Daten (Emp_address, Emp_other_data). Beide Tabellen haben dieselbe unique_key-Spalte, sodass Sie jede Zeile der Tabelle Employee_Details mit unique_key neu erstellen können. Dies kann die Systemleistung drastisch verbessern.

0
hummer