Frage

Ich arbeite mit einem Datenbank-Schema, das in Skalierbarkeitsprobleme läuft. Eine der Tabellen in dem Schema auf rund 10 Millionen Zeilen gewachsen, und ich bin zu erforschen sharding und Partitionierungsoptionen dieses Schema zu erlauben, viel größere Datensätze (etwa 1000000000-100.000.000.000 Zeilen) zu skalieren. Unsere Anwendung muss auch ausfahrbaren auf mehrere Datenbankprodukte, einschließlich jedoch nicht beschränkt auf Oracle, MS SQL Server beschränkt und MySQL.

Dies ist ein großes Problem im Allgemeinen, und ich möchte auf lesen, welche Optionen zur Verfügung stehen. Welche Ressourcen sind da draußen (Bücher, Whitepaper, Web-Sites) für Datenbank sharding und Partitionierungsstrategien?

War es hilfreich?

Lösung

ich mit den anderen Antworten zustimmen, dass Sie in Ihrem Schema und Indizes, bevor man auf sharding aussehen sollte. 10 Millionen Zeilen ist innerhalb der Fähigkeiten von einem der großen Datenbank-Engines.

Wenn Sie jedoch einige Ressourcen wollen über das Thema sharding Lernen dann diese:

Andere Tipps

ich mit Mike Woodhouse Beobachtung überein, dass die aktuelle Größe kein Problem sein sollte - und die Fragesteller stimmen

.

Die meisten kommerziellen DBMS bieten Unterstützung für fragmentierte Tabellen in einigen für oder eine anderen, unter einem Namen oder mehr anderen. Eine der wichtigsten Fragen ist, ob es ein vernünftiger Weg, um die Daten in Fragmente zu spalten. Ein üblicher Weg, dies zu tun, basierend auf einem Datum, so dass alle Werte für, sagen wir, im November 2008 gehen in ein Fragment, die für Oktober 2008 in eine andere, und so weiter. Dies hat Vorteile, wenn es darum geht, alte Daten zu entfernen. Sie können sich wahrscheinlich um das Fragment enthält Daten von Oktober 2001 (7 Jahre Datenerhalt) fallen, ohne die anderen Fragmente zu beeinflussen. Diese Art der Fragmentierung kann auch mit ‚Fragmente Beseitigung‘ helfen; wenn die Abfrage eindeutig nicht die Daten von einem gegebenen Fragmente lesen muß, dann wird es ungelesen gelassen werden, was man einen herrlichen Leistungsvorteil geben kann. (Zum Beispiel, wenn der Optimierer weiß, dass die Abfrage für ein Datum im Oktober 2008 ist, werden alle Fragmente mit Ausnahme des ignorieren, die die Daten vom Oktober 2008 enthält.)

Es gibt noch andere Fragmentierungstechniken - Round Robin die Last auf mehrere Datenträger verteilt, sondern bedeutet, dass Sie nicht von Fragment Eliminierung profitieren

.

10 Millionen Zeilen sind wirklich nicht groß in DBMS Begriffen und ich würde zuerst bei meiner Indizierung und Abfrageplänen sucht, bevor eine physikalische Verteilung von Daten mit Scherben oder Partitionen zu planen, was nicht wirklich, bis der Tabelle notwendig sein sollte, gezüchtet von ein paar Größenordnungen.

Alle IMHO, natürlich.

Nach meiner Erfahrung, große Tische treffen Sie immer auf der I / O-Seite. Die billigste Lösung ist genug mehrspaltigen Indizes hinzufügen, so dass alle Ihre Anfragen, die Daten direkt aus dem Index bekommen, ohne die Hauptdatenseiten zu laden. Das macht Ihre Einfügungen und Aktualisierungen mehr I / O-intensive, aber dies in Ordnung sein kann. Die nächste einfache Möglichkeit es max out RAM in Ihrem Server. Kein Grund zu haben, weniger als 32 GB, wenn Ihre Datenbank ist groß. Aber am Ende werden Sie noch selbst finden ich / O Bindung und Sie werden eine Menge von Festplatten bei Kauf und die Wartung ein komplexes Partitionierungsschemas zu suchen, die ein Vermögen zwischen Hardware und Arbeitskosten. Ich hoffe, dass es eine bessere Alternative ist in diesen Tagen - bewegen Sie die Datenbank von Spinnen Laufwerke Festplatten Solid-State-Laufwerke SLC - dies sollte Ihre zufällige machen liest und schreibt hundertmal schneller als Top-Modell der SAS-Laufwerke, und entfernen Sie die I / O Engpass. SSDs beginnt bei $ 10 pro Gigabyte, so dass Sie gehen ein paar Grand verbringen, aber es ist immer noch viel billiger als SANs, etc.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top