Frage

Neue Schuldatenspeicher Paradigmen wie Google BigTable und Amazon SimpleDB sind speziell für die Skalierbarkeit, unter anderem. Grundsätzlich Ungültigkeit verbindet und Denormalisierung sind die Möglichkeiten, dies erreicht wird.

dieses Thema, jedoch scheint der Konsens zu groß, dass verbindet zu sein Tabellen müssen zu teuer und Denormalisierung nicht necessarilly zu einem gewissen Grad ist „überbewertet“ Warum also hat diese oben genannten Systeme nicht zulassen verbindet und alles zwingen, zusammen in einer einzigen Tabelle Skalierbarkeit zu erreichen? Ist es die schieren Datenmengen, die in diesen Systemen (viele Terabyte) gespeichert werden muss?
Gelten die allgemeinen Regeln für Datenbanken einfach nicht auf diese Waage? Ist es, weil diese Datenbanktypen speziell auf die Speicherung vieler ähnlicher Objekte zugeschnitten sind?
Oder bin ich etwas größere Bild fehlt?

War es hilfreich?

Lösung

Verteilte Datenbanken sind nicht ganz so naiv, wie Orion impliziert; getan ziemlich viel Arbeit hat es vollständig relationale Abfragen über verteilte Datensätze zu optimieren. Sie können auf das, was Unternehmen wie Teradata, Netezza, Greenplum, Vertica, AsterData, etc tun suchen. (Oracle bekam im Spiel, schließlich auch mit ihrer jüngsten Ankündigung, Microsoft kaufte ihre solition im Namen des Unternehmens, das DataAllegro genannt wurde)

.

Dass gesagt wird, wenn die Daten bis in Terabyte skaliert werden diese Probleme sehr nicht-trivial. Wenn Sie nicht die strenge Transaktionalität brauchen und Konsistenz garantieren Sie von RDBMs bekommen können, ist es oft viel einfacher denormalize und nicht beitritt. Vor allem, wenn Sie brauchen sich nicht zu Querverweis viel. Vor allem, wenn Sie nicht tun, Ad-hoc-Analyse, sondern erfordern programmatischen Zugriff mit beliebigen Transformationen.

Denormalisierung ist überbewertet. Nur weil das ist, was passiert, wenn man mit einer 100 Tera zu tun hat, bedeutet nicht, diese Tatsache sollte von jedem Entwickler, der nie gestört wurde über Datenbanken zu lernen und hat Schwierigkeiten, eine Million oder zwei Reihen aufgrund der schlechten Schemas Planung und Optimierung von Abfragen Abfragen .

Aber wenn man in dem 100 Tera Bereich ist, mit allen Mitteln ...

Oh, der andere Grund, warum diese Technologien werden immer die Summen - Leute entdecken, dass einige Dinge nie an erster Stelle in der Datenbank gehört, und erkennen, dass sie nicht mit den Beziehungen in ihren jeweiligen Bereichen zu tun haben, sondern mit Basisschlüsselwertpaare. Für Dinge, die in einem DB nicht hätte sein sollen, dann ist es durchaus möglich, dass die Map-Reduce Rahmen oder einige persistent, schließlich konsistente Speichersystem ist genau das Richtige.

Auf einer weniger globale Ebene, empfehle ich BerkeleyDB sehr für diese Art von Problemen.

Andere Tipps

Ich bin nicht allzu vertraut mit ihnen (ich habe gelesen, nur die gleichen Blog / news / Beispiele, wie jeder andere auch), aber mein nehmen auf sie ist, dass sie eine Menge der normalen relationalen DB Funktionen im Namen zu opfern gewählt Skalierbarkeit - ich werde versuchen erklären

.

Stellen Sie sich 200 Zeilen in der Datentabelle haben.

In der Google-Rechenzentrum, 50 dieser Zeilen werden auf Server A gespeichert ist, 50 auf B und 100 auf Server C. Zusätzlich Server D enthalten redundante Kopien von Daten von Server A und B und Server-E enthält redundante Kopien von Daten auf Server C.

(Im wirklichen Leben habe ich keine Ahnung, wie viele Server verwendet werden würde, aber es ist eingerichtet mit vielen Millionen von Zeilen zu beschäftigen, so stelle ich mir ziemlich viele).

Um „select * where name =‚orion‘“ kann die Infrastruktur die Abfrage an alle Server ausgelöst, und die Ergebnisse zusammenfassen, die zurück kommen. Dies ermöglicht ihnen, über so viele Server ziemlich linear zu skalieren, wie sie wollen (FYI das ist ziemlich viel, was mapreduce ist)

Dies bedeutet jedoch einige Vor- und Nachteile müssen.

Wenn Sie eine relationale auf einige Daten verbinden tun musste, wo sie über verteilt sagen 5 Server, jedem dieser Server müssten Daten von einander ziehen für jede Zeile . Versuchen Sie das tun, wenn man 2 Millionen Zeilen über 10 Server verteilt.

Dies führt zu tradeoff # 1 - Keine verbindet

.

Auch abhängig von Netzwerk-Latenz, Serverlast, usw., gespeichert sofort einige Ihrer Daten erhalten können, aber einige eine zweite oder 2. Auch hier nehmen können, wenn Sie Dutzende von Servern haben, dies wird immer länger und länger, und die normale Annäherung von ‚jeder wartet nur, bis der langsamste Mann beendet ist‘ nicht mehr akzeptabel wird.

Dies führt zu tradeoff # 2 - Ihre Daten werden nicht immer sofort sichtbar sein, nachdem es geschrieben ist

.

Ich bin mir nicht sicher, was anderer Vor- und Nachteile gibt es, aber aus der Spitze von meinem Kopf, das ist die Haupt-2.

Also, was ich bekomme, ist, dass das ganze „denormalize, keine Joins“ Philosophie existiert nicht, weil sie keine großen Systeme verbindet skalieren in, sondern weil sie praktisch unmöglich sind in verteilten Datenbanken zu implementieren.

Das scheint ziemlich vernünftig, wenn Sie weitgehend unveränderliche Daten eines einzigen Typs zu speichern (wie Google der Fall ist). Bin ich auf dem richtigen Weg hier?

Wenn Sie über Daten sprechen, die nur gelesen werden praktisch ist, ändern sich die Regeln. Denormalisation ist am stärksten in Situationen, in denen Datenänderungen, weil die Arbeit benötigt wird erhöht und es gibt mehr Probleme mit Verriegelung. Wenn kaum die Daten ändert, dann ist Denormalisation nicht so sehr ein Problem.

Novaday Sie brauchen mehr interoperationale Umfeld für Datenbanken zu finden. Häufiger müssen Sie nicht nur eine relationale DBs, wie MySQL oder MS SQL, aber auch Big Data Farmen wie Hadoop oder nicht-relationale DBs wie MongoDB. In einigen Fällen all diese DBs werden in einer Lösung verwendet werden, um ihre Leistung im Makromaßstab so gleich wie möglich sein muss. Es bedeutet, dass Sie nicht in der Lage sein let zu verwenden sagen Azure SQL als relationale DB und eine VM mit 2 Kernen und 3 GB RAM für MongoDB. Sie müssen Ihre Lösung und verwenden DB als Service Scale-up, wenn es möglich ist (wenn es nicht möglich ist, dann in einer Wolke Ihre eigenen Cluster bauen).

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