Fünf Wege, polymorphe Daten in relationalen Datenbanken zu modellieren

2025-07-09
Fünf Wege, polymorphe Daten in relationalen Datenbanken zu modellieren

Dieser Artikel untersucht fünf Ansätze zur Modellierung polymorpher Daten in relationalen Datenbanken: Einzeltabelle, NULL-fähige Fremdschlüssel, getaggte Vereinigung, Fremdschlüssel von Kind zu Elternteil und JSON. Jeder Ansatz hat seine Vor- und Nachteile; zum Beispiel ist der Ansatz mit der Einzeltabelle einfach, kann aber langsam sein, während JSON einfach erweiterbar ist, aber keine Datenvalidierung bietet. Der Autor schlägt vor, den Ansatz zu wählen, der am einfachsten zu lesen, zu warten und zu debuggen ist, und vorzeitige Optimierung zu vermeiden.

Mehr lesen

Mehrfache Entdeckungen: Der Fall der Prolly-Trees

2025-07-01
Mehrfache Entdeckungen: Der Fall der Prolly-Trees

Prolly-Trees, eine neuartige Datenstruktur, die für Dolt entscheidend ist, wurde nicht nur einmal, sondern mindestens viermal unabhängig voneinander erfunden. Von Avery Pennaruns bup-Projekt im Jahr 2009 (das sogar Noms vorangeht) über die Prägung des Begriffs durch Noms im Jahr 2015 bis hin zu Inrias „Merkle-Suchbäumen“ im Jahr 2019 und den „inhaltsdefinierten Merkle-Bäumen“ der DePaul University im Jahr 2020 tauchte dieselbe grundlegende Datenstruktur immer wieder in verschiedenen Kontexten auf. Dies unterstreicht das häufige Phänomen multipler Entdeckungen in der Wissenschaft und hebt die Rolle der Nachfrage bei technologischen Innovationen hervor. Die Autoren von DoltHub diskutieren dieses Phänomen und seine Auswirkungen auf die zukünftige Technologie, wobei sie ihre eigenen Erfahrungen mit Prolly-Trees als Fallstudie verwenden.

Mehr lesen

Fünf Jahre go-mysql-server bei Dolt: Die Reise einer Anfrage

2025-04-27
Fünf Jahre go-mysql-server bei Dolt: Die Reise einer Anfrage

Dieser Beitrag beleuchtet fünf Jahre der Nutzung von go-mysql-server durch Dolt und beschreibt die interne Funktionsweise seiner SQL-Engine. Er verfolgt den Weg einer Anfrage von der Analyse bis zur Ergebnisgenerierung, einschließlich Analyse, Bindung, Planvereinfachung, Join-Exploration, kostenbasierter Optimierung und Ausführung. Dolt verwendet einen linksrekursiven Parser und Bottom-up-dynamische Programmierung zur Optimierung des Abfrageplans und wählt mithilfe eines Kostenmodells die optimale Ausführungsstrategie aus. Der Beitrag behandelt auch die Speicherverwaltung und zukünftige Optimierungen, wie die Vereinheitlichung von Zwischenrepräsentationen und die Reduzierung von Speicher-Churn.

Mehr lesen
Entwicklung

Die überraschende Falle der Speicherzuweisung in Go: Eine Geschichte von 30% Regressionsrate

2025-04-21
Die überraschende Falle der Speicherzuweisung in Go: Eine Geschichte von 30% Regressionsrate

Eine scheinbar harmlose Refactoring in einem Go-Projekt führte zu einer Performance-Regression von 30%. Der Übeltäter war die `GetBytes`-Methode der `ImmutableValue`-Struktur, die einen Wertreceiver verwendete und somit bei jedem Aufruf eine Heapallokation verursachte. Heapallokationen sind deutlich teurer als Stackallokationen. Die Ursache lag in der ungenauen Escape-Analyse des Go-Compilers; er konnte nicht erkennen, dass der Wertreceiver nicht entweichen würde. Die Umstellung auf einen Pointerreceiver behob das Problem. Dieses Beispiel verdeutlicht die Bedeutung des Verständnisses der Speicherzuweisungsentscheidungen des Go-Compilers und der Verwendung geeigneter Receiver-Typen für performanten Go-Code.

Mehr lesen
Entwicklung Speicherzuweisung

Cursor: KI-Code-Editor – Hype vs. Realität

2025-03-29
Cursor: KI-Code-Editor – Hype vs. Realität

Ein Entwickler der Dolt-Datenbank testete den KI-Code-Editor Cursor, um zu sehen, ob er dem Hype von 10-facher Produktivität gerecht wird. Erste Versuche mit Cursor auf einer großen Codebasis waren enttäuschend, das Debugging erwies sich als mühsam. Beim Erstellen eines neuen Projekts hingegen brillierte Cursor und generierte innerhalb weniger Stunden ein Factorio-Mod. Bei einem Arbeitsprojekt generierte Cursor effizient die grundlegende Funktionalität, benötigte aber eine umfangreiche Refactoring. Der Autor kommt zu dem Schluss, dass Cursor die Produktivität um etwa 50 % gesteigert hat, weit entfernt von den angepriesenen 10-fachen Produktivitätssteigerungen, und nennt die Einschränkungen des Tools bei der Handhabung komplexen Codes und beim Verständnis bestehender Codebasen.

Mehr lesen
Entwicklung