Was wäre eine gute Open-Source-Datenbank zum Erlernen des Datenbankdesigns? (Entwerfen des DBMS, nicht normalisieren von Tabellen / etc)

8

Wie in der Frage erwähnt, suche ich keine Hilfe beim Datenbankdesign im Hinblick auf die Erstellung von Tabellen, Normalisierung, etc.

Als Programmierprojekt möchte ich mein eigenes DBMS schreiben. Dies ist für eine Lernerfahrung mehr als alles andere, so neu zu erfinden das Rad ist irgendwie der Zweck.

Ich begann meine Suche mit SQLite - ich fand meinen und alten SVN-Zweig von 2001 ~ 2004, der erstaunlich kommentiert wurde, aber es ist immer noch viel zu verdauen. Aber trotzdem habe ich es ein oder zwei Stunden lang durchgemacht, und mein Kopf ist bereits auf Hyperantrieb mit Ideen.

Ich frage also hier, ob irgendjemand von einem kleinen und sehr einfachen DBMS weiß, dass ich ein paar Ideen oder Inspirationen bekommen könnte, was das Parsen von Abfragen, das Speichern von Daten, das Erstellen einer Suche usw. betrifft.

Danke!

    
RichA 16.02.2011, 06:19
quelle

6 Antworten

1

Mir wurde gesagt, dass der PostgreSQL-Quellcode sehr gut dokumentiert und strukturiert ist.
Es ist jedoch offensichtlich kein "kleines Basis-DBMS".

Abgesehen davon sind die einzigen "kleinen", die ich kenne, Java-basierte DBMS:

Nicht sicher, ob eine Java-basierte Implementierung Ihnen helfen wird.

    
a_horse_with_no_name 16.02.2011 07:40
quelle
1

Es gibt Edward Sciores SimpleDB (nicht verwandt mit SimpleDB von Amazon), "Ein einfaches Java-basiertes Multiuser-System zum Unterrichten von Datenbank-Interna". Es ist in Java, aber ich denke, dass die Ideen ziemlich leicht zu C übersetzen werden.

Aus Ссылка :

  

SimpleDB ist eine Transaktion mit mehreren Benutzern   Datenbankserver in Java geschrieben, der   interagiert mit Java-Client-Programmen   über JDBC. Das System ist vorgesehen für   nur pädagogische Verwendung. Der Code ist   sauber und kompakt. Die APIs sind   einfach. Die Lernkurve   ist relativ klein. Alles über   es ist auf die Verbesserung der   Erfahrung eines Datenbanksystems   Internat natürlich. Folglich   System ist absichtlich nackt.   Es implementiert nur einen kleinen Bruchteil von   SQL und JDBC und tut wenig oder gar nicht   Fehlerüberprüfung. Obwohl es ein   Tolles Lehrmittel kann ich mir nicht vorstellen   dass irgendjemand es für benutzen würde   alles andere.

Es gibt auch ein Buch:

Datenbankdesign und Implementierung

    
Thomas Padron-McCarthy 16.02.2011 09:07
quelle
1

Wie bereits erwähnt, sind SQLite, JavaDB und SimpleDB gute Beispiele. Ich würde Berkeley DB zur Liste hinzufügen. Berkley DB ist gut dokumentiert, gibt es seit einigen Jahren, hat mehrere verfügbare APIs sowie mehrere Zugriffsmethoden wie HASH, QUEUE und RECNO zusätzlich zum traditionellen B-Baum. Berkeley DB ist eine in C geschriebene Schlüssel / Wert-Datenbankbibliothek. Berkeley DB XML ist eine XML-Datenbankbibliothek, die in C ++ auf Berkeley DB geschrieben wurde. Berkeley DB Java Edition ist eine Datenbank mit 100% Java-Schlüssel / Wert-Datenbank. Alle sind unter einer GPL-ähnlichen Lizenz erhältlich und der Quellcode ist in der Verteilung enthalten.

Die SQL-API von Berkeley DB enthält die SQLite-API, die im Grunde den BDB-Schlüssel / Wert-Paar-Datenspeicher unter dem SQLite-Abfrage-Layer implementiert. Berkeley DB war auch die erste Datenspeicherimplementierung unter MySQL, die wiederum eine SQL-Abfrageebene verwendete und die Daten in einem einfachen Schlüssel / Datenwert-Datenformat speicherte. Es ist sicherlich eine interessante Art, das Problem zu betrachten - wenn Sie einen flexiblen, schnellen, skalierbaren, zuverlässigen Datenspeicher haben, können Sie dann jede Art von API oder Datendarstellung / Abstraktion darüber ablegen. Dies ist genau das, was Berkeley DB tut, indem es eine Wahl zwischen dem Schlüssel / Wertpaar-Datenspeicher oder XML, SQL, Java Collections oder einer POJO-ähnlichen Persistenzschicht über der Basisschlüssel / Wertpaar-Infrastruktur bietet.

Berkeley DB ist ungefähr so ​​nah an einer "reinen" Datenspeicher-Engine, wie Sie finden werden. Es macht keine Annahmen über Struktur, Inhalt oder das Format der Daten, die gespeichert werden. Es ermöglicht den oberen Schichten, diese Abstraktionen bereitzustellen, während die untere Ebene sich auf schnellen, skalierbaren und zuverlässigen Speicher konzentriert. Das ist einer der Gründe, warum Berkeley DB so weit verbreitet ist - seine Einfachheit und Fokussierung macht es sehr schnell, zuverlässig und skalierbar.

Disclaimer: Ich bin einer der Produktmanager für Berkeley DB, also bin ich eindeutig voreingenommen. Aber ich arbeite seit 25 Jahren auch an Datenbankprodukten und weiß ein wenig über DBMS-Interna. : -)

Viel Glück bei Ihrer Recherche.

Dave

    
dsegleau 17.02.2011 06:20
quelle
0

Sie können sich die Apache Derby-Datenbank ansehen. Es ist eine vollwertige RDBMS-Implementierung; Nun, es ist komplett in Java geschrieben. und es ist definitiv keine kleine und einfache Implementierung. Aber es kann als eine gute Referenz dienen.

    
s_b 16.02.2011 07:26
quelle
0

Vielleicht SQLite ist ein guter Anfang. Es ist so einfach wie möglich (keine Netzwerkschicht, einfache Sperrung usw.), aber es versteht echtes SQL, hat Indizes und Einschränkungen und ist in C implementiert. Sein Speicher ist jedoch etwas Besonderes.

    
9000 16.02.2011 08:55
quelle
0

Wenn Sie ein einfaches relationales Datenbanksystem wollen, das SQL-Abfragesprache verwendet, dann ist es SQLite. Lesen Sie diesen Code weiter.

Aber wenn Sie nicht auf vollständig relationalen Datenspeichern hängen, dann googeln Sie nach dem Quellcode von B + tree. Der B + -Baum ist die grundlegende Datenstruktur, mit der Sie einen sortierten Index auf der Festplatte verwalten können, und vor 15-20 Jahren gab es mehrere Pakete von C-Quellcode, die dies implementierten. Es ist viel einfacher, weil es kein SQL gibt, und im Wesentlichen zwei Teile, eins zum Verwalten von Blöcken auf dem Datenträger und das andere zum Manipulieren der B + Baumstruktur.

Sobald Sie das verstanden haben, können Sie zum SQLite-Code zurückkehren und ohne Zweifel ähnliche Module inmitten des restlichen Codes identifizieren.

Manchmal ist der beste Weg zu lernen, einige historische Schritte zurückzuverfolgen.

    
Michael Dillon 16.02.2011 11:28
quelle