Speichertipp: In-Memory-Engine mit spaltenorientierter Architektur und Bitmap-Index für analytische Workloads in GoColumn: spaltenorientierte Datenverarbeitung in Go
Column organisiert Daten spaltenweise im Arbeitsspeicher, nutzt cachefreundliche SoA-Strukturen und Bitmap-Indizes für schnelle Filter und Projektionen. Transaktionen mit Commit und Rollback, sharded Latches sowie Zero-Allocation-Abfragen sichern das Tempo. TTL, Primärschlüssel, Change-Stream und Snapshot runden den Kern ab.
Column erlaubt Abfragen im Arbeitsspeicher ohne Allokationen.
Das System basiert auf einem strikt spaltenorientierten Layout nach dem Structure-of-Arrays-Prinzip. Jede Spalte wird als eigene Datenstruktur im Cache gehalten, wodurch sich Cache-Misses minimieren. Diese Organisation erlaubt schnelle Filtervorgänge über einzelne Spalten, da nur die tatsächlich relevanten Werte verarbeitet werden. Eine Bitmap-Indexierung ergänzt das Konzept. Sie bildet logische Abfragen über Bitoperationen ab und macht Filter wie AND, OR oder NOT zu Operationen im Speicher, die in Mikrosekunden ausgeführt werden.
Neue Datensätze entstehen in Collections, die über „NewCollection()“ angelegt werden. Spalten definiert der Entwickler mit Typfunktionen wie „ForString()“, „ForFloat64()“ oder „ForInt16()“. Ein einzelner Datensatz wird über „Insert()“ eingefügt, mehrere Datensätze werden effizienter innerhalb einer Transaktion eingefügt. Die Methode „Query()“ erzeugt dafür eine Transaktionsinstanz, auf der sich „Insert()“ mehrfach aufrufen lässt.
Abfragen, Indizes und Transaktionen
Filter entstehen durch „WithValue()“ oder durch vordefinierte Indizes. Häufige Prädikate lassen sich als Bitmap-Index anlegen, der bei jedem Insert oder Update automatisch neu bewertet wird. Eine Abfrage auf einen solchen Index mit „With("rogue")“ läuft um Größenordnungen schneller als ein Scan. Kombinierte Operationen wie „Union(), Without()“ oder logische Schnittmengen sind direkt implementiert und erlauben komplexe Auswahlbedingungen, ohne dass Zeilen erneut gescannt werden.
Jede Transaktion besitzt vollständige Isolation. Änderungen innerhalb einer Transaktion erscheinen erst nach „Commit()“, bei Fehlern erfolgt automatisch ein Rollback. Damit lassen sich mehrere Schreibvorgänge atomar zusammenfassen. Über Merge-Operationen können numerische oder stringbasierte Werte atomar aktualisiert werden, etwa um Kontostände zu inkrementieren oder Zeichenfolgen zu erweitern.
Sortierte Indizes und Iteration
Neben Bitmaps unterstützt Column auch sortierte Indizes. Diese werden in einer Transaktion temporär erstellt und erlauben geordnete Durchläufe über Teilmengen der Daten. Die Iteration über Ergebnislisten erfolgt über „Range()“. Vor dem Durchlauf werden Spaltenleser mit „txn.String()“ oder „txn.Float64()“ initialisiert, um Daten ohne Heap-Allokation auszulesen. Das Prinzip ermöglicht hochfrequente Lesezugriffe bei minimalem Speicherverbrauch.
Ablaufsteuerung und TTL
Ein internes Ablaufmanagement sorgt dafür, dass Datensätze mit Zeitbegrenzung automatisch entfernt werden. Jeder Collection liegt eine Spalte für Ablaufzeiten zugrunde. Beim Einfügen lässt sich über „SetTTL()“ eine Lebensdauer definieren, nach deren Ablauf die Zeile asynchron gelöscht wird. Diese Spalte kann auch aktiv erweitert werden, etwa durch eine Verlängerung per „Extend()“.
Primärschlüssel und binäre Datentypen
Neben dem internen Offset-Index unterstützt Column benutzerdefinierte Primärschlüssel über „ForKey()“. Abfragen erfolgen dann über „QueryKey()“, wodurch sich Datensätze direkt adressieren lassen. Für komplexe Strukturen existiert „ForRecord()“, das Objekte über „MarshalBinary()“ und „UnmarshalBinary()“ in Binärform speichert. Damit lassen sich strukturierte Datentypen wie Vektoren oder Koordinaten nativ in einer Spalte ablegen.
Streaming und Replikation
Die Engine bietet eine Change-Data-Stream-Schnittstelle, die alle Commits kontinuierlich überträgt. Ein Writer vom Typ commit.Channel empfängt Änderungen und kann diese an externe Systeme wie Kafka weitergeben oder direkt in eine zweite Instanz replizieren. Mit „Replay()“ lassen sich Transaktionen auf einer Ziel-Collection erneut anwenden, wodurch sich synchrone Kopien aufbauen lassen.
Snapshot und Wiederherstellung
Für persistente Sicherungen stehen „Snapshot()“ und „Restore()“ bereit. Beide Methoden arbeiten während laufender Transaktionen. Snapshots werden in eine Binärdatei geschrieben, die sich später wieder einlesen lässt. Da die Schema-Information nicht mitgespeichert wird, muss die Collection vor dem Restore mit identischer Spaltenstruktur initialisiert sein.
Stand: 08.12.2025
Es ist für uns eine Selbstverständlichkeit, dass wir verantwortungsvoll mit Ihren personenbezogenen Daten umgehen. Sofern wir personenbezogene Daten von Ihnen erheben, verarbeiten wir diese unter Beachtung der geltenden Datenschutzvorschriften. Detaillierte Informationen finden Sie in unserer Datenschutzerklärung.
Einwilligung in die Verwendung von Daten zu Werbezwecken
Ich bin damit einverstanden, dass die Vogel IT-Medien GmbH, Max-Josef-Metzger-Straße 21, 86157 Augsburg, einschließlich aller mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen (im weiteren: Vogel Communications Group) meine E-Mail-Adresse für die Zusendung von Newslettern und Werbung nutzt. Auflistungen der jeweils zugehörigen Unternehmen können hier abgerufen werden.
Der Newsletterinhalt erstreckt sich dabei auf Produkte und Dienstleistungen aller zuvor genannten Unternehmen, darunter beispielsweise Fachzeitschriften und Fachbücher, Veranstaltungen und Messen sowie veranstaltungsbezogene Produkte und Dienstleistungen, Print- und Digital-Mediaangebote und Services wie weitere (redaktionelle) Newsletter, Gewinnspiele, Lead-Kampagnen, Marktforschung im Online- und Offline-Bereich, fachspezifische Webportale und E-Learning-Angebote. Wenn auch meine persönliche Telefonnummer erhoben wurde, darf diese für die Unterbreitung von Angeboten der vorgenannten Produkte und Dienstleistungen der vorgenannten Unternehmen und Marktforschung genutzt werden.
Meine Einwilligung umfasst zudem die Verarbeitung meiner E-Mail-Adresse und Telefonnummer für den Datenabgleich zu Marketingzwecken mit ausgewählten Werbepartnern wie z.B. LinkedIN, Google und Meta. Hierfür darf die Vogel Communications Group die genannten Daten gehasht an Werbepartner übermitteln, die diese Daten dann nutzen, um feststellen zu können, ob ich ebenfalls Mitglied auf den besagten Werbepartnerportalen bin. Die Vogel Communications Group nutzt diese Funktion zu Zwecken des Retargeting (Upselling, Crossselling und Kundenbindung), der Generierung von sog. Lookalike Audiences zur Neukundengewinnung und als Ausschlussgrundlage für laufende Werbekampagnen. Weitere Informationen kann ich dem Abschnitt „Datenabgleich zu Marketingzwecken“ in der Datenschutzerklärung entnehmen.
Falls ich im Internet auf Portalen der Vogel Communications Group einschließlich deren mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen geschützte Inhalte abrufe, muss ich mich mit weiteren Daten für den Zugang zu diesen Inhalten registrieren. Im Gegenzug für diesen gebührenlosen Zugang zu redaktionellen Inhalten dürfen meine Daten im Sinne dieser Einwilligung für die hier genannten Zwecke verwendet werden. Dies gilt nicht für den Datenabgleich zu Marketingzwecken.
Recht auf Widerruf
Mir ist bewusst, dass ich diese Einwilligung jederzeit für die Zukunft widerrufen kann. Durch meinen Widerruf wird die Rechtmäßigkeit der aufgrund meiner Einwilligung bis zum Widerruf erfolgten Verarbeitung nicht berührt. Um meinen Widerruf zu erklären, kann ich als eine Möglichkeit das unter https://contact.vogel.de abrufbare Kontaktformular nutzen. Sofern ich einzelne von mir abonnierte Newsletter nicht mehr erhalten möchte, kann ich darüber hinaus auch den am Ende eines Newsletters eingebundenen Abmeldelink anklicken. Weitere Informationen zu meinem Widerrufsrecht und dessen Ausübung sowie zu den Folgen meines Widerrufs finde ich in der Datenschutzerklärung.
Leistung und Benchmarks
In Benchmarks mit 100.000 Datensätzen und zwölf Spalten werden Einfügezeiten unter einer halben Millisekunde und Leseoperationen im zweistelligen Nanosekundenbereich erreicht. Selbst bei 20 Millionen Zeilen liegen Scans im Millisekundenbereich, während indizierte Abfragen im Mikrosekundenbereich bleiben. Die Engine erreicht damit ein Leistungsprofil, das sich mit spezialisierten Analytics-Systemen messen kann.
Aktuelles eBook
Open-Source-Storage – Speicher-Software zum Nulltarif
eBook „Open-Source-Storage“
(Bild: Storage-Insider)
Der Bedarf an Speicherkapazität steigt von Tag zu Tag – nicht nur, um die Daten von Produkten, Kunden und Transaktionen zu sichern, sondern auch, um Compliance-Anforderungen zu erfüllen und Auditierungen gut zu überstehen. Eine leistungsfähige Storage-Lösung ist also gefragt. Eine kostenlose Option bietet Open-Source-Software für Storage, insbesondere dann, wenn man sie selbst den eigenen Anforderungen anpassen darf.