<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Spaltenorientierte_Datenbank</id>
	<title>Spaltenorientierte Datenbank - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Spaltenorientierte_Datenbank"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Spaltenorientierte_Datenbank&amp;action=history"/>
	<updated>2026-06-12T11:55:56Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Spaltenorientierte_Datenbank&amp;diff=2220273&amp;oldid=prev</id>
		<title>imported&gt;ⵓ: /* Implementierungen */</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Spaltenorientierte_Datenbank&amp;diff=2220273&amp;oldid=prev"/>
		<updated>2025-11-16T22:50:16Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Implementierungen&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Eine &amp;#039;&amp;#039;&amp;#039;spaltenorientierte Datenbank&amp;#039;&amp;#039;&amp;#039; ist ein [[Datenbank]], die ihre Inhalte spaltenweise (und nicht zeilenweise) physisch abspeichert. Das hat Vorteile bei Anwendungen wie einem [[Data Warehouse]], wo [[Aggregation (Informatik)|Aggregate]] über große Zahlen ähnlicher Elemente gebildet werden.&amp;lt;ref&amp;gt;George P. Copeland, Setrag N. Khoshafian: &amp;#039;&amp;#039;A decomposition storage model&amp;#039;&amp;#039;. SIGMOD ’85, 1985, [[doi:10.1145/318898.318923]].&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;C-Store&amp;quot;&amp;gt;{{Webarchiv|url=http://db.lcs.mit.edu/projects/cstore/vldb.pdf |wayback=20100619191833 |text=&amp;#039;&amp;#039;C-Store: A column-oriented DBMS&amp;#039;&amp;#039;. |archiv-bot=2023-01-12 15:00:29 InternetArchiveBot }} (PDF; 174&amp;amp;nbsp;kB) In: Stonebraker et al.: &amp;#039;&amp;#039;Proceedings of the 31st VLDB Conference&amp;#039;&amp;#039;, Trondheim 2005&amp;lt;/ref&amp;gt; Der spaltenorientierte Ansatz steht im Kontrast zum &amp;#039;&amp;#039;zeilenorientierten&amp;#039;&amp;#039;, dem die meisten bekannten Datenbanksysteme folgen.&lt;br /&gt;
&lt;br /&gt;
== Beschreibung ==&lt;br /&gt;
Eine Datenbank stellt meistens ihre Daten als zweidimensionale [[Tabelle]]n aus Zeilen und Spalten dar; diese müssen aber in eindimensionaler Form gespeichert werden. Zum Beispiel könnte eine Datenbank die folgende Tabelle enthalten:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Personalnr&lt;br /&gt;
! Nachname&lt;br /&gt;
! Vorname&lt;br /&gt;
! Gehalt&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Schmidt&lt;br /&gt;
| Josef&lt;br /&gt;
| 40000&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Müller&lt;br /&gt;
| Maria&lt;br /&gt;
| 50000&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Meier&lt;br /&gt;
| Julia&lt;br /&gt;
| 44000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Diese einfache Tabelle enthält eine Spalte für die Personalnummer, Namensspalten und ein Gehalt.&lt;br /&gt;
&lt;br /&gt;
Diese Tabelle existiert im [[Arbeitsspeicher]] und auf der [[Festplatte]] des Computers. Beide Speicherarten haben gemeinsam, dass die Daten aus der Sicht des [[Betriebssystem]]s in einer eindimensionalen Folge von [[Byte]]s angeordnet sind. Die zu lösende Aufgabe ist also, die zweidimensionale Struktur einer Datenbanktabelle in eine eindimensionale Folge von Bytes abzubilden.&lt;br /&gt;
&lt;br /&gt;
Eine zeilenorientierte Datenbank hängt alle Datenwerte einer Zeile aneinander, es folgt die nächste Zeile usw.&lt;br /&gt;
&lt;br /&gt;
 1,Schmidt,Josef,40000;2,Müller,Maria,50000;3,Meier,Julia,44000;&lt;br /&gt;
&lt;br /&gt;
Eine spaltenorientierte Datenbank geht stattdessen Spalte für Spalte vor:&lt;br /&gt;
&lt;br /&gt;
 1,2,3;Schmidt,Müller,Meier;Josef,Maria,Julia;40000,50000,44000;&lt;br /&gt;
&lt;br /&gt;
Die physische Organisation einer Datenbank wird von [[Partition (Datenträger)|Partitionierung]], [[Datenbankindex|Indizes]], [[Cache|Caching]], [[Sicht (Datenbank)#Materialized View|Views]], [[OLAP-Würfel]] und [[Transaktion (Informatik)|transaktionalen]] Aspekten wie [[WAL-Prinzip|Write-Ahead-Logging]] stark beeinflusst. Unter der Berücksichtigung all dieser Einflüsse stellt sich heraus, dass [[Online Transaction Processing|OLTP]]-Systeme eher zeilenorientiert, [[Online Analytical Processing|OLAP]]-Systeme eine Balance aus Zeilen- und Spaltenorientierung anstreben.&lt;br /&gt;
&lt;br /&gt;
== Vor- und Nachteile ==&lt;br /&gt;
Vergleiche zwischen zeilenorientierten und spaltenorientierten Systemen konzentrieren sich typischerweise vor allem auf die Effizienz des Festplattenzugriffs, der im Vergleich zu anderen Operationen des Computers erhebliche Zeit verbraucht. Das Lesen eines [[Megabyte]]s sequentiell gespeicherter Daten kann genauso lang dauern wie ein einziger [[Direktzugriff]].&amp;lt;ref&amp;gt;Pat &amp;amp; Betty O’Neil, Xuedong Chen, Stephen Revilak: [https://www.cs.umb.edu/~poneil/TPC_Talk082409.pdf &amp;#039;&amp;#039;The Star Schema Benchmark and Augmented Fact Table Indexing&amp;#039;&amp;#039;.] (PDF; 501&amp;amp;nbsp;kB) TPC Technology Conference 8/24/09&amp;lt;/ref&amp;gt; Und da die Zugriffszeit der Festplatten sich im Vergleich zur CPU-Geschwindigkeit nur langsam verbessert &amp;#039;&amp;#039;(siehe [[Mooresches Gesetz]])&amp;#039;&amp;#039;, wird diese Sichtweise auch bleiben, solange die Systeme ihre Daten auf Festplatten speichern. In stark vereinfachter Form kann man sich durch die folgenden Beobachtungen ein Bild der Vor- und Nachteile der spalten- und zeilenorientierten Organisation machen.&lt;br /&gt;
&lt;br /&gt;
* Spaltenorientierte Systeme sind effizienter, wenn ein Aggregat über viele Zeilen, aber nur wenige Spalten gebildet werden muss, da man dann im Gegensatz zum zeilenorientierten System nur diese und nicht alle Spalten lesen muss.&amp;lt;br /&amp;gt;Beispiel: &amp;lt;code&amp;gt;SELECT SUM(Gehalt) FROM tabelle;&amp;lt;/code&amp;gt;&lt;br /&gt;
* Spaltenorientierte Systeme sind effizienter, wenn eine Spalte gleichzeitig für alle Zeilen der Tabelle einen neuen Wert erhält, da man die Spaltendaten effizient schreiben kann und die Daten der anderen Spalten nicht berücksichtigen muss.&amp;lt;br /&amp;gt;Beispiel Gehaltserhöhung: &amp;lt;code&amp;gt;UPDATE tabelle SET Gehalt = Gehalt * 1.03;&amp;lt;/code&amp;gt;&lt;br /&gt;
* Zeilenorientierte Systeme sind effizienter, wenn gleichzeitig viele Spalten einer einzigen Zeile benötigt werden und wenn die Zeilenbreite sehr groß ist, da dann die ganze Zeile mit einem einzigen Plattenzugriff gelesen werden kann.&amp;lt;br /&amp;gt;Beispiel: &amp;lt;code&amp;gt;SELECT * FROM tabelle WHERE Personalnr = 1;&amp;lt;/code&amp;gt;&lt;br /&gt;
* Zeilenorientierte Systeme sind beim Einfügen einer neuen Zeile effizienter, wenn alle Daten dieser Zeile auf einmal vorliegen, da dann die Zeile mit einem einzigen Zugriff geschrieben werden kann.&amp;lt;br /&amp;gt;Beispiel: &amp;lt;code&amp;gt;INSERT INTO tabelle (Personalnr, Nachname, Vorname, Gehalt) VALUES (4, &amp;#039;Maier&amp;#039;, &amp;#039;Karl-Heinz&amp;#039;, 45000);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der Praxis sind zeilenorientierte Architekturen für typische OLTP-Aufgaben (z.&amp;amp;nbsp;B. Buchhaltungssysteme) mit vielen interaktiven Transaktionen günstig. Spaltenorientiere Systeme sind gut für OLAP-Aufgaben geeignet (z.&amp;amp;nbsp;B. [[Analytisches Informationssystem|analytische Informationssysteme]]), die typischerweise durch eine kleine Anzahl sehr komplexer Abfragen über alle Datensätze charakterisiert sind. Es gibt aber auch eine Anzahl bewährter zeilenorientierter relationaler OLAP-Datenbanken, die [[Terabyte]]s oder gar [[Petabyte]]s von Daten bearbeiten können, so etwa [[Teradata (Software)|Teradata]], oder auch IBM PureData System for Analytics (IBM Netezza).&lt;br /&gt;
&lt;br /&gt;
=== Kompression ===&lt;br /&gt;
Spaltendaten haben einen einheitlichen Datentyp; daher stehen in spaltenorientierten Systemen einige Möglichkeiten der Plattenplatzoptimierung zur Verfügung, die bei zeilenorientierten Daten nicht möglich sind. Zum Beispiel machen sich viele [[Datenkompression|Kompressionsschemata]] wie der [[Lempel-Ziv-Welch-Algorithmus]] (LZW) oder die [[Lauflängenkodierung]] die Ähnlichkeit benachbarter Daten für die Kompression zunutze. Zwar können diese Techniken auch für zeilenorientierte Daten eingesetzt werden, aber eine typische Implementation wird weniger effektive Ergebnisse erreichen.&amp;lt;ref&amp;gt;D. J. Abadi, S. R. Madden, N. Hachem: &amp;#039;&amp;#039;Column-stores vs. row-stores: how different are they really?&amp;#039;&amp;#039; SIGMOD’08, 2008, S. 967–980.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;N. Bruno: [http://www-db.cs.wisc.edu/cidr/cidr2009/Paper_2.pdf &amp;#039;&amp;#039;Teaching an old elephant new tricks&amp;#039;&amp;#039;.] (PDF; 185&amp;amp;nbsp;kB) CIDR ’09, 2009.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die Kompression zu verbessern, sortieren einige Implementationen (zum Beispiel [[Vertica]]) die Spalten. In Verbindung mit [[Bitmap-Index|Bitmap-Indizes]] kann Sortieren die Kompression um eine Größenordnung verbessern.&amp;lt;ref&amp;gt;Daniel Lemire, Owen Kaser, Kamel Aouiche: &amp;#039;&amp;#039;Sorting improves word-aligned bitmap indexes&amp;#039;&amp;#039;. In: &amp;#039;&amp;#039;Data &amp;amp; Knowledge Engineering&amp;#039;&amp;#039;, 69 (1), 2010, S. 3–28. {{arXiv|0901.3751}}&amp;lt;/ref&amp;gt; Um die Kompression der [[Lexikographische Ordnung|lexikographischen Ordnung]] bei der Lauflängenkodierung zu verbessern, empfiehlt es sich, die Spalten kleiner [[Kardinalität (Datenbanken)|Kardinalität]] als die ersten Sortierungsschlüssel zu verwenden.&amp;lt;ref&amp;gt;Daniel Lemire, Owen Kaser: &amp;#039;&amp;#039;Reordering Columns for Smaller Indexes&amp;#039;&amp;#039;, {{arXiv|0909.1346}}&amp;lt;/ref&amp;gt; So wäre es bei einer Tabelle mit den Spalten &amp;#039;&amp;#039;Name&amp;#039;&amp;#039;, &amp;#039;&amp;#039;Geschlecht&amp;#039;&amp;#039;, &amp;#039;&amp;#039;Alter&amp;#039;&amp;#039; am günstigsten, zunächst anhand des Geschlechtes (Kardinalität 3), dann des Alters (Kardinalität &amp;lt;&amp;amp;nbsp;150) und dann des Namens zu sortieren.&lt;br /&gt;
&lt;br /&gt;
Bei einer spaltenorientierten Datenbank, wo jede einzelne Spalte für sich komprimiert werden kann, hat die Spaltenreihenfolge in der Tabelle auf die Komprimierung zwar keinen Einfluss. Die Reihenfolge kann aber in jedem Fall bei zusammengesetzten Indizes zu besseren Kompressionsraten führen. Jedoch kann beim Umsortieren der Nutzen eines Index für eine Abfrage verloren gehen, die nur einen Teil der Indexfelder vorgibt. Umfasst der Index über alle Mitarbeiter beispielsweise Name und Werk, wird die Kompression zu steigern sein, wenn er nach Werk und Name umsortiert wird. Für eine Suche nach Name ist der Index danach allerdings üblicherweise nicht mehr zu gebrauchen.&lt;br /&gt;
&lt;br /&gt;
Spaltenkompression führt zu einer Reduzierung des Plattenplatzverbrauchs auf Kosten der Lesegeschwindigkeit. Sämtliche Daten einer einzelnen Spalte lassen sich viel effizienter lesen, wenn diese Daten an derselben Stelle abgespeichert sind, wie das bei einer zeilenorientierten Architektur der Fall ist. Der Zugriff auf einzelne Daten wird mit zunehmender Kompression schwieriger, da man erst große Datenmengen dekomprimieren muss, um einen einzigen Satz zu lesen. Daher werden spaltenorientierte Architekturen oft mit zusätzlichen Mechanismen bereichert, um die Notwendigkeit, auf komprimierte Daten zuzugreifen, zu minimieren.&amp;lt;ref name=&amp;quot;Infobright&amp;quot;&amp;gt;Slezak et al.: [https://www.vldb.org/pvldb/1/1454174.pdf Brighthouse: an analytic data warehouse for ad-hoc queries] (PDF; 456&amp;amp;nbsp;kB), Proceedings of the 34th VLDB Conference, Auckland 2008&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seit Mitte der 2000er Jahre gilt die Annahme, die Komprimierung sei unter dem Strich langsamer, nicht mehr unbedingt. Mit zunehmender Rechenleistung ist es zumeist schneller geworden, kleine Datenmengen von Platte zu holen und danach zu dekomprimieren, anstatt große unkomprimierte Datenmengen zu lesen. Dasselbe gilt für Schreibzugriffe. So setzen auch die Hersteller zeilenorientierter Datenbanken wie Oracle auf Komprimierung und empfehlen diese auf geeigneten Servern zur Geschwindigkeitssteigerung.&amp;lt;ref name=&amp;quot;Oracle Advanced Compression&amp;quot;&amp;gt;[https://www.oracle.com/technetwork/database/options/compression/index.html &amp;#039;&amp;#039;Oracle Advanced Compression&amp;#039;&amp;#039;.] Oracle Technet&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Implementierungen ==&lt;br /&gt;
Spaltenspeicherung kam in der Form [[Invertierte Datei|Invertierter Dateien]] schon in der Frühzeit der Datenbanksysteme, beginnend in den 1970ern. Zum Beispiel implementierte &amp;#039;&amp;#039;Statistics Canada&amp;#039;&amp;#039; das RAPID-System&amp;lt;ref&amp;gt;Turner, Hammond, Cotton: [http://portal.acm.org/citation.cfm?id=1286746 &amp;#039;&amp;#039;A DBMS for Large Statistical Databases&amp;#039;&amp;#039;.] In: &amp;#039;&amp;#039;Proceedings of VLDB 1979&amp;#039;&amp;#039;, Rio de Janeiro.&amp;lt;/ref&amp;gt; schon 1976 und benutzte es für die kanadische Volkszählung und einige andere statistische Anwendungen. RAPID wurde auch weltweit von anderen statistischen Organisationen bis in die 1980er genutzt, von Statistics Canada sogar bis in die 1990er.&lt;br /&gt;
&lt;br /&gt;
Für viele Jahre war [[Sybase]] IQ das einzige auf dem Markt erhältliche Produkt im Bereich der spaltenorientierten Datenbanksysteme. Das hat sich allerdings inzwischen durch viele [[Open Source|Open-Source]]- und [[Proprietäre Software|proprietäre]] Anwendungen stark geändert:&lt;br /&gt;
* Proprietär&lt;br /&gt;
**[[ParStream]]&lt;br /&gt;
** [[Oracle (Datenbanksystem)|Oracle 12c]] Enterprise Edition mit der neuen kostenpflichtigen In-Memory Option&lt;br /&gt;
** [[Oracle Retail Predicative Application Serve (RPAS)]]&lt;br /&gt;
** [[SAND CDBMS]]&lt;br /&gt;
** [[SenSage]]&lt;br /&gt;
** [[SAP HANA]]&lt;br /&gt;
** [[Sybase IQ]]&lt;br /&gt;
** [[SADAS]]&lt;br /&gt;
** [[Vertica]] und sein akademischer &amp;#039;&amp;#039;Bruder&amp;#039;&amp;#039; C-Store&lt;br /&gt;
** [[Valentina (Datenbank)|Valentina]]&lt;br /&gt;
** [[KDB (Datenbank)|KDB]]&lt;br /&gt;
** [[Kickfire]]&lt;br /&gt;
** [[Db2]] – IBM DB2 with BLU Acceleration&amp;lt;ref&amp;gt;[https://www-01.ibm.com/software/data/db2/linux-unix-windows/db2-blu-acceleration/ ibm.com]&amp;lt;/ref&amp;gt;&lt;br /&gt;
** Addamark, heute [[Sensage]] Scalable Log Server&lt;br /&gt;
** [[1010data]]s Tenbase database&lt;br /&gt;
** [[DataProbe]]&lt;br /&gt;
** Exasol&lt;br /&gt;
** [[InfiniDB]] Enterprise Edition, Integration mit [[MySQL]]&lt;br /&gt;
** [[Infobright]] Enterprise Edition, Integration mit [[MySQL]] (früher Brighthouse)&lt;br /&gt;
** [[Skytide XOLAP Server]]&lt;br /&gt;
** [[Space-Time Research]] SuperSTAR&lt;br /&gt;
** [[Paraccel|ParAccel Analytic Database]]&lt;br /&gt;
** [[Aster Data Systems]]&lt;br /&gt;
** [[FluidDB]]&lt;br /&gt;
** [[Ingres (Datenbanksystem)|Ingres]]&lt;br /&gt;
** [[smartFOCUS smartSERVER ADS]]&lt;br /&gt;
** [[Microsoft SQL Server]] 2012 mit dem neuen Feature &amp;#039;&amp;#039;Column Store Index&amp;#039;&amp;#039;.&lt;br /&gt;
* [[Freie Software]] (Open-source)&lt;br /&gt;
** RC21, GPL&amp;lt;ref&amp;gt;http://www.vermontdatabase.com/rc21home.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
** [[Calpont]] InfiniDB Community Edition, (MySQL-Frontend), GPLv2&lt;br /&gt;
** [[Apache Cassandra]] (Apache Software Foundation)&lt;br /&gt;
** [[Apache Parquet]] für cloud-native Datenanalyse &lt;br /&gt;
** [[Apache Arrow]] In-Memory-Format&lt;br /&gt;
** [[C-Store]] (mit kommerziellem Support durch die Firma [[Vertica]], keine Weiterentwicklung seit Oktober 2006)&lt;br /&gt;
** [[DuckDB]] &lt;br /&gt;
** [[GenoByte]] Spaltenbasiertes Speichersystem für [[Genotyp]]daten&lt;br /&gt;
** [[Lemur Bitmap Index C++ Library]] (GPL)&lt;br /&gt;
** [[FastBit]]&lt;br /&gt;
** [[Infobright]] Community Edition&lt;br /&gt;
** [[LucidDB]] und [[Eigenbase]]&lt;br /&gt;
** [[MariaDB#MariaDB-ColumnStore|MariaDB-ColumnStore]]&amp;lt;ref name=&amp;quot;Informatik Aktuell: MariaDB ColumnStore&amp;quot;&amp;gt;[https://www.informatik-aktuell.de/aktuelle-meldungen/2016/april/mariadb-big-data-analytics-engine-mit-columnstore.html Informatik Aktuell: MariaDB ColumnStore]&amp;lt;/ref&amp;gt;&lt;br /&gt;
** [[Metakit]]&lt;br /&gt;
** [[MonetDB]] besondere Eignung für statistische Analysen mit [[R (Programmiersprache)|R]] (Mozilla Public License)&lt;br /&gt;
** [[Apache Druid]]&lt;br /&gt;
** ClickHouse&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Data-Warehousing]]&lt;/div&gt;</summary>
		<author><name>imported&gt;ⵓ</name></author>
	</entry>
</feed>