Säulenorientierte DBMs
A Säulenorientierte DBMs oder Columnar -DBMs ist ein Datenbankverwaltungssystem (DBMS), das Datentabellen speichert Säule eher als durch Reihe. Zu den Vorteilen gehören ein effizienterer Zugriff auf Daten, wenn nur eine Teilmenge von Spalten abfragt (durch Beseitigung der Notwendigkeit, Spalten zu lesen, die nicht relevant sind), und mehr Optionen für die Datenkomprimierung. Sie sind jedoch in der Regel weniger effizient, um neue Daten einzuführen.
Die praktische Verwendung eines Spaltengeschäfts im Vergleich zu einem Zeilengeschäft unterscheidet sich wenig in der Relationale DBMs Welt. Sowohl Spalten- als auch Zeilendatenbanken können herkömmliche Datenbankabfragesprachen wie SQL verwenden, um Daten zu laden und Abfragen auszuführen. Sowohl Zeilen- als auch Columnar -Datenbanken können zum Grundrich in einem System werden, um Daten für gemeinsame zu bedienen extrahieren, transformieren, laden (ETL) und Werkzeuge.
Beschreibung
Hintergrund
Ein relationales Datenbankverwaltungssystem enthält Daten, die eine zweidimensionale Tabelle mit Spalten und Zeilen darstellen. Beispielsweise könnte eine Datenbank diese Tabelle haben:
Rowid | Empid | Nachname | Vorname | Gehalt |
---|---|---|---|---|
001 | 10 | Schmied | Joe | 60000 |
002 | 12 | Jones | Maria | 80000 |
003 | 11 | Johnson | Cathy | 94000 |
004 | 22 | Jones | Bob | 55000 |
Diese einfache Tabelle enthält eine Mitarbeiterkennung (Empid), Namensfelder (LastName und FirstName) und ein Gehalt (Gehalt). Dieses zweidimensionale Format ist eine Abstraktion. In einer tatsächlichen Implementierung verlangt Speicherhardware, dass die Daten so sind serialisiert in die eine oder andere Form.
Die teuersten Operationen mit Festplatten sind sucht. Um die Gesamtleistung zu verbessern, sollten verwandte Daten auf eine Weise gespeichert werden, um die Anzahl der SUBS zu minimieren. Dies ist bekannt als als Referenzortund das grundlegende Konzept erscheint in einer Reihe verschiedener Kontexte. Festplatten werden zu einer Reihe von organisiert Blöcke einer festen Größe, normalerweise genug, um mehrere Zeilen des Tisches zu speichern. Durch die Organisation der Daten der Tabelle, die so in diesen Blöcken passen und die Zeilen auf sequentielle Blöcke gruppieren, wird die Anzahl der Blöcke, die gelesen oder gesucht werden müssen, in vielen Fällen zusammen mit der Anzahl der Suche minimiert werden.
Eine Umfrage von Pinnecke et al.[1] Deckt Techniken für die Säulen-/Zeilenhybridisierung ab 2017 ab.
Zeilenorientierte Systeme
Eine gemeinsame Methode zum Speichern einer Tabelle besteht darin, jede Datenzeile wie folgt zu serialisieren:
001: 10, Smith, Joe, 60000; 002: 12, Jones, Mary, 80000; 003: 11, Johnson, Cathy, 94000; 004: 22, Jones, Bob, 55000;
Da Daten in die Tabelle eingefügt werden, wird ihnen eine interne ID zugewiesen, die Rowid
Das wird intern im System verwendet, um auf Daten zu verweisen. In diesem Fall haben die Datensätze sequentiell Rowid
s unabhängig vom benutzerdefinierten Empid
. In diesem Beispiel verwendet das DBMS kurze Ganzzahlen zum Speichern Rowid
s. In der Praxis werden normalerweise größere Zahlen, 64-Bit oder 128-Bit, verwendet.
Zeilenorientierte Systeme sind so konzipiert, dass sie Daten für eine gesamte Zeile oder Aufzeichnung in so wenig wie möglich effizient zurückgeben. Dies entspricht dem gängigen Anwendungsfall, bei dem das System versucht, Informationen über ein bestimmtes Objekt abzurufen, sagen die Kontaktinformationen für einen Benutzer in a rolodex System- oder Produktinformationen für eine Online Einkaufen System. Durch das Speichern der Daten des Datensatzes in einem einzigen Block auf der Festplatte sowie mit verwandten Datensätzen kann das System Datensatz mit einem Minimum an Festplattenoperationen schnell abrufen.
Zeilenorientierte Systeme sind nicht effizient bei der Durchführung von setweiten Vorgängen in der gesamten Tabelle im Gegensatz zu einer kleinen Anzahl spezifischer Datensätze. Um beispielsweise alle Datensätze in der Beispieltabelle mit Gehältern zwischen 40.000 und 50.000 zu finden, müssten die DBMs die gesamte Tabelle vollständig durchsuchen, um nach passenden Datensätzen zu suchen. Während die oben gezeigte Beispieltabelle wahrscheinlich in einen einzelnen Festplattenblock passt, würden eine Tabelle mit nur wenigen hundert Zeilen nicht, und es wäre mehrere Festplattenvorgänge erforderlich, um die Daten abzurufen und zu untersuchen.
Um die Leistung dieser Art von Operationen zu verbessern (die sehr häufig sind und im Allgemeinen die Verwendung eines DBMS), unterstützen die meisten DBMS die Verwendung von Datenbankindizes, die alle Werte aus einer Reihe von Spalten speichern Rowid
Zeiger zurück in den ursprünglichen Tisch. Ein Index in der Gehaltsspalte würde ungefähr so aussehen:
55000: 004; 60000: 001; 80000: 002; 94000: 003;
Da sie nur einzelne Datenstücke speichern und nicht ganze Zeilen, sind die Indizes im Allgemeinen viel kleiner als die Haupttabellenspeicher. Das Scannen dieses kleineren Datensatzes reduziert die Anzahl der Festplattenvorgänge. Wenn der Index stark verwendet wird, kann er die Zeit für gemeinsame Operationen drastisch verkürzen. Durch die Wartung von Indizes fügt das System jedoch Overhead hinzu, insbesondere wenn neue Daten in die Datenbank geschrieben werden. Datensätze müssen nicht nur in der Haupttabelle gespeichert werden, sondern auch alle beigefügten Indizes müssen aktualisiert werden.
Der Hauptgrund, warum Indizes die Leistung in großen Datensätzen dramatisch verbessern, ist, dass Datenbankindizes für eine oder mehrere Spalten normalerweise nach Wert sortiert werden, was macht Bereichsabfragen Operationen (wie die oben genannten "Finden Sie alle Aufzeichnungen mit Gehältern zwischen 40.000 und 50.000") sehr schnell (niedriger Zeitkomplexität).
Eine Reihe von zeilenorientierten Datenbanken ist so konzipiert, dass sie vollständig in passen RAM, ein In-Memory-Datenbank. Diese Systeme hängen nicht von Festplattenoperationen ab und haben gleichzeitiger Zeitzugriff auf den gesamten Datensatz. Dies verringert die Notwendigkeit von Indizes, da die gleiche Anzahl von Vorgängen erforderlich ist, um die Originaldaten vollständig als vollständiger Index für typische Aggregationszwecke zu scannen. Solche Systeme können daher einfacher und kleiner sein, können jedoch nur Datenbanken verwalten, die in den Speicher passen.
Säulenorientierte Systeme
Eine spaltenorientierte Datenbank serialisiert alle Werte einer Spalte zusammen, dann die Werte der nächsten Spalte usw. Für unsere Beispieltabelle würden die Daten auf diese Weise gespeichert:
10: 001,12: 002,11: 003,22: 004; Smith: 001, Jones: 002, Johnson: 003, Jones: 004; Joe: 001, Mary: 002, Cathy: 003, Bob: 004; 60000: 001.80000: 002.94000: 003.55000: 004;
In diesem Layout entspricht jede der Spalten enger mit der Struktur eines Index in einem zeilenorientierten System. Dies kann zu Verwirrung führen, die zu dem falschen Glauben führen kann, dass ein spaltenorientierter Speicher "wirklich" nur "ein Zeilengeschäft mit einem Index für jede Spalte ist. Es ist jedoch die Zuordnung der Daten, die sich dramatisch unterscheidet. In einem zeilenorientierten System kartieren die Indizes Spaltenwerte in RowIDs, während in einem spaltenorientierten System die Spalten RowIDs an Spaltenwerte zugeordnet sind.[2] Dies mag subtil erscheinen, aber der Unterschied kann in dieser allgemeinen Modifikation in demselben Geschäft ersichtlich sein, in dem die beiden oben genannten "Jones" -Positionen in ein einzelnes Element mit zwei Rowids komprimiert werden:
… Smith: 001;Jones: 002,004; Johnson: 003;…
Ob ein säulenorientiertes System effizienter in Betrieb ist oder nicht, hängt stark von der automatischen Arbeitsbelastung ab. Vorgänge, die alle Daten für ein bestimmtes Objekt (die gesamte Zeile) abrufen, sind langsamer. Ein zeilenorientiertes System kann die Zeile in einer einzigen Festplatte abrufen, während zahlreiche Festplattenoperationen aus einer Spaltendatenbank aus mehreren Spalten erfasst werden. Diese Operationen in der gesamten Reihe sind jedoch im Allgemeinen selten. In den meisten Fällen wird nur eine begrenzte Untergruppe von Daten abgerufen. In einer Rolodex -Anwendung beispielsweise ist das Sammeln der ersten und Nachnamen aus vielen Zeilen, um eine Liste von Kontakten zu erstellen, weitaus häufiger als das Lesen aller Daten für eine einzelne Adresse. Dies gilt umso mehr für das Schreiben von Daten in die Datenbank, insbesondere wenn die Daten mit vielen optionalen Spalten "spärlich" sind. Aus diesem Grund haben Spaltengeschäfte trotz vieler theoretischer Nachteile eine hervorragende reale Leistung gezeigt.[3]
Partitionierung, Indizierung, Caching, Ansichten, Olap -Würfelund Transaktionssysteme wie z. Schreibbeindämmerung oder Multiversionskontrolle Alle wirken sich dramatisch auf die physische Organisation eines der beiden Systeme aus. Das gesagt, Online -Transaktionsverarbeitung (OLTP)-Fokussierte RDBMS-Systeme sind zeilorientierter, während Online -Analyseverarbeitung (OLAP) -Fokussierte Systeme sind ein Gleichgewicht aus zeilenorientiert und säulenorientiert.
Vorteile
Zugriffszeit
Vergleiche zwischen zeilenorientierten und spaltenorientierten Datenbanken befassen sich in der Regel mit der Effizienz des Hartscheibenzugriffs für eine bestimmte Arbeitsbelastung als Zeit suchen ist unglaublich lang im Vergleich zu den anderen Engpässen in Computern. Zum Beispiel eine typische Serielle ATA (SATA) Festplatte hat eine durchschnittliche Suchzeit zwischen 16 und 22 Millisekunden [4] Während Dram -Zugang zu einem Intel Core i7 -Prozessor durchschnittlich 60 Nanosekunden dauert, fast 400.000 Mal so schnell.[5] Der Datenträgerzugriff ist eindeutig ein großer Engpass bei der Behandlung von Big Data. Die Spaltendatenbanken steigern die Leistung, indem die Datenmenge reduziert werden, die von der Festplatte gelesen werden müssen, sowohl durch effizientes Komprimieren der ähnlichen Spaltendaten als auch durch das Lesen der zur Beantwortung der Abfrage erforderlichen Daten.
In der Praxis sind Spaltendatenbanken gut geeignet für Olap-ähnliche Workloads (z. B.,, Data Warehouse), die normalerweise hochkomplexe Abfragen über alle Daten beinhalten (möglicherweise Petabyte). Es müssen jedoch einige Arbeiten erledigt werden, um Daten in eine Spaltendatenbank zu schreiben. Transaktionen (Einsätze) müssen in Säulen unterteilt und während des Speicherns komprimiert werden, wodurch sie für OLTP -Workloads weniger geeignet sind. Zeilenorientierte Datenbanken sind gut geeignet für OLTP-ähnliche Workloads, die stärker mit interaktiven Transaktionen beladen sind. Beispielsweise ist das Abrufen aller Daten aus einer einzelnen Zeile effizienter, wenn sich diese Daten an einem einzigen Ort befinden (minimierende Festplattensuche), wie in zeilenorientierten Architekturen. Säulenorientierte Systeme wurden jedoch als Hybride entwickelt, die sowohl OLTP- als auch OLAP-Operationen in der Lage sind. Einige der OLTP-Einschränkungen, die solchen säulenorientierten Systemen ausgesetzt sind, werden unter Verwendung von (unter anderem) vermittelt, unter anderem in Erinnerung Datenspeicher.[6] Säulenorientierte Systeme, die sowohl für OLAP- als auch für OLTP-Rollen geeignet sind, reduzieren den Gesamtdaten-Fußabdruck effektiv, indem sie die Notwendigkeit separater Systeme beseitigen.[7]
Kompression
Säulendaten sind einheitlicher Typ; Daher gibt es einige Möglichkeiten für Speichergrößenoptimierungen in spaltenorientierten Daten, die in zeilenorientierten Daten nicht verfügbar sind. Zum Beispiel viele beliebte moderne Komprimierungsschemata, wie z. LZW oder Kodierung der LauflängeVerwenden Sie die Ähnlichkeit benachbarter Daten zur Komprimierung. Fehlende Werte und wiederholte Werte, die in klinischen Daten häufig sind, können durch einen Zwei-Bit-Marker dargestellt werden.[8] Während dieselben Techniken für zeilenorientierte Daten verwendet werden können, erzielt eine typische Implementierung weniger effektive Ergebnisse.[9][10]
Um die Komprimierung zu verbessern, können auch die Sortierreihen helfen. Zum Beispiel verwenden Bitmap -Indizes, Sortierung kann die Kompression durch eine Größenordnung verbessern.[11] Maximieren Sie die Komprimierungsvorteile der Lexikografische Ordnung in Gedenken an Kodierung der LauflängeEs ist am besten, niedrig zu verwenden.Kardinalität Spalten als erste Sortierschlüssel.[12] Bei einer Tabelle mit Spalten Geschlecht, Alter, Namen, Name ist es beispielsweise am besten, zuerst nach dem Wert zu sortieren (Kardinalität von zwei), dann Alter (Kardinalität von <128) und dann Name.
Die Säulenkomprimierung erreicht eine Verringerung des Scheibenraums auf Kosten der Effizienz des Abrufs. Je mehr benachbarte Komprimierung erreicht werden, desto schwieriger kann der Zufallszugriff werden, da die Daten möglicherweise unkomprimiert sein müssen, um gelesen zu werden. Daher werden säulenorientierte Architekturen manchmal durch zusätzliche Mechanismen angereichert, die darauf abzielen, den Zugriff auf komprimierte Daten zu minimieren.[13]
Geschichte
Spaltenspeicher oder transponierte Dateien wurden in den frühen Tagen der DBMS -Entwicklung implementiert. Taxir war die erste Anwendung eines spaltenorientierten Datenbankspeichersystems mit Schwerpunkt auf Informationsregen in der Biologie[14] 1969. Klinische Daten aus Patientenaufzeichnungen mit viel mehr Attributen als analysiert wurden, wurden 1975 und danach von einem zeitorientierten Datenbanksystem (TODS) verarbeitet.[8] Statistik Kanada implementierte das schnelle System[15] 1976 und verwendete es für die Verarbeitung und Abruf der kanadischen Volkszählung und der Wohnung sowie mehrere andere statistische Anwendungen. Rapid wurde mit anderen statistischen Organisationen auf der ganzen Welt geteilt und in den 1980er Jahren weit verbreitet. Es wurde bis in die neunziger Jahre von Statistics Canada weiterhin verwendet.
Eine andere spaltenorientierte Datenbank war SCSS.[16][17][18]
Spätere Spalten-orientierte Datenbankpakete enthalten:
Seit etwa 2004 gab es zusätzliche Open Source- und kommerzielle Implementierungen. Monetdb wurde unter einem freigelassen Open-Source-Lizenz Am 30. September 2004,[19] folgte der inzwischen verstorbenen C-Store.[20]
C-Store war ein Universitätsprojekt, das schließlich mit Teammitglied Michael Stonebraker Einbleiben, geführt zu Vertica, was er 2005 mitbegründete.[21][22]
Das MonetDB-verwandte X100-Projekt entwickelte sich zu Vector.[23][24] Druide ist ein spaltenorientierter Datenspeicher, der Ende 2012 Open-Sourcut wurde und jetzt von zahlreichen Organisationen verwendet wird.[25]
Klassisch Relationale DBMs Kann spaltenorientierte Strategien verwenden, indem zeilenorientierte und säulenorientierte Tabellen gemischt werden. Trotz der DBMS -Komplexität hat sich dieser Ansatz von den Jahren 2010 bis zu präsent als wertvoll erwiesen. Zum Beispiel im Jahr 2014 führte Citusdata spaltenorientierte Tabellen für ein PostgreSQL[26] und McObject Support für den Säulenspeicher mit der Veröffentlichung von Extremedb Finanzausgabe 2012[27]Dies wurde dann verwendet, um einen neuen Leistungsstandard für die unabhängig geprüfte STAC-M3-Benchmark zu ermitteln.[28]
Siehe auch
Verweise
- ^ Marcus Pinnecke; David Broneske; Gabriel Campero Durand; Gunter Saake (2017). Werden Datenbanken für Hybrid -Workloads bei GPUs geeignet? Die Perspektive einer Speichermotor (PDF). IEEE 33. Internationale Konferenz für Data Engineering (ICDE). doi:10.1109/icde.2017.237.
- ^ Daniel Abadi; Samuel Madden (31. Juli 2008). "Ein weiterer Mythos entlarven: Säulenhäuser gegen vertikale Partitionierung". Die Datenbankspalte. Archiviert von das Original Am 4. Dezember 2008.
- ^ Stavros Harizopoulos; Daniel Abadi; Peter Boncz. "Spaltenorientierte Datenbanksysteme" (PDF). VLDB 2009 Tutorial. p. 5.
- ^ Masiero, Manuel (8. Januar 2013). "Western Digital 4 TB WD4001FAEx Review: Zurück in Schwarz". Toms Hardware.
- ^ Levinthal, Dr. David (2009). "Leistungsanalysehandbuch für Intel® Core ™ i7 -Prozessor und Intel® Xeon ™ 5500 -Prozessoren" (PDF). Intel. p. 22. Abgerufen 2017-11-10.
- ^ "Kompakte Transaktionsdaten in Hybrid -OLTP & OLAP -Datenbanken" (PDF). Abgerufen Der 1. August, 2017.
- ^ "Ein gemeinsamer Datenbankansatz für OLTP und OLAP unter Verwendung einer In-Memory-Spaltendatenbank" (PDF). Abgerufen Der 1. August, 2017.
- ^ a b Stephen Weyl; James F. Fries; Gio Wiederhold; Frank Germano (1975). "Ein modulares selbstbeschreibendes klinisches Datenbanksystem". Computer und biomedizinische Forschung. 8 (3): 279–293. doi:10.1016/0010-4809 (75) 90045-2. PMID 1157469.
- ^ D. J. Abadi; S. R. Madden; N. Hachem (2008). Säulenhäuser vs. Zeilengeschäfte: Wie unterschiedlich sind sie wirklich?. Sigmod'08. S. 967–980.
- ^ Bruno, N (2009). "Einen alten Elefanten neuen Tricks unterrichten". Arxiv:0909.1758 [cs.db].
- ^ Daniel Lemire, Owen Kaser, Kamel Aouiche, "Sortieren verbessert die wort ausgerichteten Bitmap-Indizes", Data & Knowledge Engineering, Band 69, Ausgabe 1 (2010), S. 3-28.
- ^ Daniel Lemire und Owen Kaser, Spalten für kleinere Indizes neu anordnen, Information Sciences 181 (12), 2011
- ^ Dominik Ślęzak; Jakub Wróblewski; Victoria Eastwood; Piotr Synak (2008). Brighthouse: Ein analytisches Data Warehouse für Ad -hoc -Abfragen (PDF). Verfahren der 34. VLDB -Konferenz. Auckland, Neuseeland. Archiviert von das Original (PDF) am 2016-05-07. Abgerufen 2009-05-04.
- ^ George F. Estabrook; Robert C. Brill (November 1969). "Die Theorie des Taxir -Angestellten". Mathematische Biosschen. 5 (3–4): 327–340. doi:10.1016/0025-5564 (69) 90050-9.
- ^ "A DBMS für große statistische Datenbanken". ACM.org. Vldb '79. 1979. S. 319–327.
- ^ Bereits bis September 1977 auf dem Markt
- ^ Nie, Norman H. (1980). SCSS: Ein Benutzerhandbuch zum SPSS -Konversations -statistischen System. ISBN 978-0070465336.
- ^ "SCSS von SPSS, Inc". Computerwelt. 26. September 1977. p. 28.
- ^ "Eine kurze Geschichte über uns". monetdb.org.
- ^ "C Store". Mit.edu. Archiviert von das Original Am 2012-03-05. Abgerufen 2008-01-22.
- ^ "Die Vertica Analytic-Datenbank: C-Store 7 Jahre später" (PDF) " (PDF). Vldb.org. 28. August 2012.
- ^ Charles Babcock (21. Februar 2008). "Die Datenbank Pioneer überdenken den besten Weg, um Daten zu organisieren". Informationswoche. Abgerufen 2018-12-08.
- ^ Marcin Zuukowski; Peter Boncz (20. Mai 2012). Von x100 bis vector.: Chancen, Herausforderungen und Dinge, an die die meisten Forscher nicht denken. Proceedings der ACM Sigmod International Conference 2012 zum Management von Daten. ACM. S. 861–862. doi:10.1145/2213836.2213967. ISBN 978-1-4503-1247-9. S2CID 9187072.
- ^ D. Inkster; M. Zuukowski; P.A. Boncz (20. September 2011). "Integration von vektoriell mit Ingres". ACM Sigmod Record. 40 (3): 45. Citeseerx 10.1.1.297.4985. doi:10.1145/2070736.2070747. S2CID 6372175.
- ^ "Druide". Druid.io.
- ^ "Citusdata". github.com.
- ^ Saujani, Sandeep (19. Juni 2012). "McObject ExtremedB Financial Edition In-Memory-DBMS bricht durch den Datenmanagement-Engpass von Capital Markets". Bobhandbuch.
- ^ STAC -Benchmark -Rat, Führung (3. November 2012). "McObject ExtremedB 5.0 Financial Edition mit Kove XPD L2 Speichersystem, Dell PowerEdge R910 Server und Mellanox Connectx-2 und MIS5025Q QDR Infiniband Switch". STAC.