Ich muss lernen, wie Datenbanken funktionieren, um sie effizienter zu nutzen, und ich lerne auf diese Weise.
Ich möchte mein eigenes Datenbanksystem erstellen. Ich beziehe mich nicht auf die Erstellung einer Pseudodatenbank, die mithilfe von Abfragen Dateien analysiert. Dies wäre einfach eine Dateisystemschnittstelle mit einer Abfragesprache. Ich spreche von der tatsächlichen Struktur einer Datenbank-Engine. Und da das, was ich vorhabe, weder relational noch dokumentenorientiert ist (es ist "knotenorientiert", falls es das überhaupt gibt), würde ich jede Ressource benötigen, um so abstrakt und hochgradig wie möglich zu sein.
Wie würde ich das schaffen? Welche Ressourcen / Tutorials / Bücher kann ich lesen, um sie zu verstehen?
Die Sprache spielt keine Rolle. Im Idealfall wäre der Code ein Pseudocode zur Veranschaulichung des Konzepts, der nicht an eine bestimmte Sprache gebunden ist, aber alles kann. Ich konnte auf Google nichts zu diesem Thema finden (da ich in diesem Bereich so Analphabet bin, gebe ich möglicherweise nicht die richtige Suche ein).
Wenn solche Ressourcen nicht zur Verfügung stehen, dann wäre meiner Meinung nach etwas darüber, wie man einen Kunden erstellt, zumindest ein Schritt in die richtige Richtung.
quelle
I studied open-source DBs, but their codebase is too huge
: Wenn so etwas wie redis oder FlockDB zu groß ist für Sie zu lesen, ich sehe nicht , wie Sie schreiben oder eigene Datenbank fertig werden.Antworten:
Fang hier an. Wenn Sie sich mit einer komplexen Anwendung wie einer Datenbank befassen (selbst eine einfache Datenbank ist eine komplexe Anwendung), sollten Sie mit der Geschichte der Domäne und der richtigen Terminologie vertraut sein und zumindest eine sehr genaue Vorstellung von der Architektur haben. Sie können mit dem Wikipedia-Artikel in der Datenbank beginnen . Verbrachte ein paar Tage damit, alle Artikel zu den verwandten Konzepten und den verschiedenen Datenbanktypen zu lesen.
Als nächstes wählen Sie Relational oder NoSQl. Wenn Sie sich für NoSQL entscheiden, sollten Sie einen NoSQL-Typ auswählen. Dies ist äußerst wichtig, da Sie keine Architekturdokumente finden, in denen alle verschiedenen Datenbankfamilien behandelt werden. Es ist nicht wirklich wichtig, welche Sie auswählen, wählen Sie einfach eine und bleiben Sie dabei.
Ja, (leider), denn nachdem Sie eine Datenbankfamilie ausgewählt haben, sollten Sie Code aus Open-Source-Datenbanken dieser Familie untersuchen. Es gibt einige allgemeine Richtlinien, nach denen gesucht werden muss:
Einige Beispiele, die passen:
Holen Sie sich den Quellcode, kompilieren Sie ihn und spielen Sie damit herum. Sie müssen keine Patches oder ähnliches einreichen. Sehen Sie sich einfach den Code an und nehmen Sie hier und da kleine Änderungen vor, um zu sehen, was passiert. Es ist ein inkrementeller Prozess. Je mehr Sie damit spielen, desto einfacher wird es, die Funktionsweise des Codes zu verstehen. Wenn das erste Projekt, das Sie ausgewählt haben, äußerst schwer zu verstehen ist, fahren Sie mit dem nächsten fort.
Eine weitere großartige Option wäre, sich auf die Entwicklung einer Engine für MySQL zu konzentrieren, wie @NB in einer früheren Antwort nahe legt .
Wenn Sie an einem Punkt angelangt sind, an dem Sie in der Lage sind, etwas Nützliches mit der Codebasis zu tun, beteiligen Sie sich an der Community des Projekts. Auf diese Weise finden Sie am einfachsten detailliertere Ressourcen zu den betreffenden Konzepten.
Und dann können Sie endlich mit der Arbeit an Ihrer Datenbank beginnen. Zuerst könnten Sie einfach einen extrem verkleinerten Klon des Codes schreiben, den Sie untersucht haben. Es muss nicht originell sein, viele großartige Projekte begannen als Klone oder Gabeln.
Es gibt einige Bücher:
Und ein paar hundert weitere sowie eine Vielzahl von wissenschaftlichen Artikeln, die Sie problemlos über Google nachverfolgen können. Sie müssen zunächst definieren, was Sie tun möchten, und dann nach einem Buch suchen. Wenn Sie sich auf eine Community von anderen Datenbankautoren einlassen, können Sie auch die Liste der Bücher eingrenzen und möglicherweise viel bessere Vorschläge als die oben genannten erhalten.
Viel Glück! Ich erwarte einen Kommentar mit einem Link zu Ihrem Repository, wenn Sie fertig sind. Und wenn Sie noch nie fertig sind, hinterlassen Sie einen Kommentar, der mich daran erinnert, dass ich den Compiler, mit dem ich 2001 angefangen habe, noch nicht fertiggestellt habe.
quelle
I'm expecting a comment with a link to your repository when you're done
: ganz sicher! Nochmals vielen Dank an Sie und alle anderen, das war wirklich erhebend.Sie sollten es einfach tun und aufhören, zu viel nachzudenken. Spaß am Lernen und Begeisterung sind Geschenke.
Andere zu fragen, ob es eine gute Idee ist, ist sicherlich keine gute Strategie . Wenn ich all die Frösche gehört hätte, würde ich heute noch bei Ikea arbeiten und den Einkaufswagen vom Parkplatz zum Depot schieben.
Sie müssen sich nicht so rechtfertigen wie Ayende in diesem interessanten Beitrag . Die Frage war:
Wenn Sie sich an dem Prozess erfreuen, machen Sie sich keine Sorgen um das Ziel, Sie haben bereits gewonnen.
quelle
msgstr "(es ist" knotenorientiert ", falls es das überhaupt gibt)". - Vielleicht finden Sie deshalb nicht viel!
Tauchen Sie mit Version 0.1 ein und sehen Sie, wo Sie es bekommen. Sie können mehr aus dem Versuch lernen, das zu produzieren, was Sie wollen, indem Sie fragen, was Sie tun sollen. Nehmen Sie sich ein paar Tage Zeit und überprüfen Sie, wo Sie sind.
Vor ungefähr 18 Jahren habe ich ein grundlegendes Datenbanksystem (zum Spaß, go figure) mit Btree-Indizes geschrieben und eine Menge gelernt.
quelle
MySQL verfügt über eine steckbare Speicher-Engine-Struktur. Vielleicht möchten Sie herausfinden, wie Engines für MySQL erstellt werden.
quelle
Klingt nach einem tollen Projekt. Anscheinend ist es Ihr Ziel, keine Produktionssoftware zu erstellen, sondern sich mit Datenbanken und dem Prozess der Erstellung eines Datenbanksystems vertraut zu machen.
Ich glaube nicht, dass Sie viel recherchieren müssen. Es scheint, als ob der Zweck darin besteht, die Grundlagen für die Erstellung eines knotenbasierten Datenbanksystems zu erlernen.
So würde ich anfangen:
Nachdem Sie die Grundlagen erarbeitet haben, haben Sie viel mehr Einblick in das, was schwierig oder problematisch ist. Dann können Sie Nachforschungen anstellen, Verbesserungen finden und diese integrieren.
quelle
Das Schreiben einer eigenen Datenbank "um zu verstehen, wie alles funktioniert" ist der einzige gute Grund dafür (da Datenbanken verrückt schwer zu finden und schwer zu korrigieren sind). Du bist verrückt, aber auf eine gute Weise!
Um zu sehen, wie es gemacht wird, schlage ich vor, sich SQLite anzuschauen. Die SQLite-Quelle ist nur etwa 1,3 MB komprimiert und eine vollständig ACID-kompatible Transaktionsdatenbank. Es ist auch gemeinfrei und der Hauptautor ist ein netter Kerl, der sicher gerne Ihre Fragen beantwortet. (Ich denke, die schwierigsten Aspekte bestehen darin, Informationen wirklich auf die Festplatte zu übertragen. Betriebssysteme und Hardware davon zu überzeugen, nicht mehr zu lügen und die Transaktion JETZT wirklich zu schreiben, ist überraschend schwierig. Deshalb bin ich so froh, dass ich nie eine Datenbank schreiben muss.)
quelle
Kauf ein Buch:
http://www.springer.com/computer/database+management+%26+information+retrieval/book/978-1-84628-394-9
Indizes sind heutzutage der wichtigste Aspekt von Datenbanken. Studieren Sie die Alternativen, die wie binäre Bäume existieren.
Lesen Sie auch über das kartesische Produkt , mit dem Sie berechnen können, wie komplex Verknüpfungen sein werden.
quelle
Lernen Sie relationale Algebra.
Finden Sie eine kleine DB-Engine, lernen Sie die Quelle.
Nee. Sie müssen lernen, wie Sie eine Datenbank effizient nutzen. Sie sind vielleicht ein besserer Fahrer, wenn Sie verstehen, wie Ihr Auto funktioniert, aber Sie sind ein viel besserer Fahrer, wenn Sie sich wirklich auf das Fahren konzentrieren.
Nehmen Sie an den traditionellen Routen teil: Nehmen Sie an einem Kurs teil, lesen Sie ein Buch, lesen Sie Peer Reviews, stellen Sie Fragen, verwenden Sie den Index luke .
quelle
Learn relational algebra.
Angenommen, op ist natürlich an relationalen Datenbanken interessiert ...