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!
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.
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:
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
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.
Tags und Links c parsing database sqlite relational-database