it-swarm.dev

Erstellen Sie mein eigenes Datenbanksystem

Ich muss lernen, wie Datenbanken funktionieren, um sie effizienter nutzen zu können, und meine Art zu lernen ist, dies zu tun.

Ich möchte mein eigenes Datenbanksystem erstellen. Ich beziehe mich nicht auf das Erstellen einer Pseudodatenbank, die Abfragen zum Parsen von Dateien verwendet. Dies wäre einfach eine Dateisystemschnittstelle mit einer Abfragesprache. Ich spreche über die tatsächliche Struktur eines Datenbankmoduls. 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 auf hoher Ebene wie möglich zu sein.

Wie würde ich das schaffen? Welche Ressourcen/Tutorials/Bücher kann ich lesen, um zu verstehen?

Die Sprache spielt keine Rolle. Im Idealfall wäre der Code ein Pseudocode zur Veranschaulichung des Konzepts, nicht an eine bestimmte Sprache gebunden, aber alles würde funktionieren. Ich konnte auf Google nichts zu diesem Thema finden (da ich in diesem Bereich so Analphabeten bin, gebe ich möglicherweise einfach nicht die richtige Suche ein).

Wenn solche Ressourcen nicht verfügbar sind, wäre etwas über das Erstellen eines Clients zumindest ein Schritt in die richtige Richtung.

65
Xananax

(es ist "knotenorientiert", falls das überhaupt existiert)

Fang hier an. Wenn Sie mit einer komplexen Anwendung wie einer Datenbank arbeiten (selbst eine einfache Datenbank ist eine komplexe Anwendung), sollten Sie mit dem Verlauf der Domäne und der richtigen Terminologie vertraut sein und zumindest eine sehr gute Vorstellung von der Architektur haben. Sie können mit dem Wikipedia-Artikel über Datenbank beginnen. Verbrachte einige Tage damit, alle Artikel zu den zugehörigen Konzepten und den verschiedenen Datenbanktypen zu lesen.

Und da das, was ich vorhabe, weder relational noch dokumentenorientiert ist

Als nächstes wählen Sie Relational oder NoSQl. Wenn Sie NoSQL auswählen, sollten Sie einen NoSQL-Typ auswählen. Das ist äußerst wichtig. Sie werden keine Architekturdokumente finden, in denen alle verschiedenen Datenbankfamilien behandelt werden. Es spielt keine Rolle, welche Sie auswählen, wählen Sie einfach eine aus und bleiben Sie dabei.

Die Sprache spielt keine Rolle.

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, wonach zu suchen ist:

  • Relativ kleine Codebasis,
  • Architekturdokumente oder zumindest ein Entwicklungsblog,
  • Die Datenbank, die Sie auswählen, sollte in der Nähe dessen liegen, was in der Familie als generisch angesehen wird. Es ist schwieriger, daraus zu lernen, wenn sie hoch spezialisiert ist.

Einige Beispiele, die passen:

Holen Sie sich die Quelle, kompilieren Sie sie und spielen Sie damit herum. Sie müssen keine Patches oder etwas Besonderes einreichen, sondern nur den Code erkunden und hier und da kleine Änderungen vornehmen, um zu sehen, was passiert. Es ist ein inkrementeller Prozess. Je mehr Sie damit herumspielen, desto einfacher wird es, zu verstehen, was der Code tut. Wenn das erste Projekt, das Sie ausgewählt haben, äußerst schwer zu verstehen ist, fahren Sie einfach mit dem nächsten fort.

Eine weitere großartige Option wäre, sich darauf zu konzentrieren, eine Engine für MySQL als @ N.B zu erstellen. schlägt in einer früheren Antwort vor .

Wenn Sie einen Punkt erreichen, an dem Sie in der Lage sind, mit der Codebasis etwas Nützliches zu tun, sich in die Community des Projekts einzubringen, ist dies der einfachste Weg, detailliertere Ressourcen zu den beteiligten Konzepten zu finden.

Und dann fangen Sie endlich an, an Ihrer Datenbank zu arbeiten. Zuerst könnten Sie einfach einen extrem verkleinerten Klon des Codes schreiben, den Sie untersucht haben. Es muss nicht originell sein, einige großartige Projekte begannen als Klone oder Gabeln.

Welche Ressourcen/Tutorials/Bücher kann ich lesen, um zu verstehen?

Es gibt einige Bücher:

Und ein paar hundert andere sowie eine Vielzahl von wissenschaftlichen Arbeiten, die Sie problemlos über Google nachverfolgen können. Sie müssen zuerst definieren, was Sie tun möchten, und dann nach einem Buch suchen. Wenn Sie sich mit einer Community von anderen Datenbankautoren zusammenschließen, 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, den ich 2001 geschrieben habe, noch nicht fertiggestellt habe.

63
yannis

Sie sollten es einfach tun und aufhören, zu viel nachzudenken. Den Lernprozess und die Begeisterung zu genießen, sind Geschenke.

Andere zu fragen, ob es eine gute Idee ist, ist sicherlich keine gute Strategie . Wenn ich allen Fröschen zugehö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 interessanter Beitrag . Die Frage war:

Als pragmatischer Entwickler frage ich mich jedoch, was dieses Projekt in einem gesättigten Markt neu bietet, in dem Sie ziemlich ausgereifte Alternativen wie CouchDB, MongoDB, Tokio, Redis und viele mehr haben. Viele dieser Produkte sind auch plattformübergreifend und werden mit einer nachgewiesenen Aufzeichnung mit C-Geschwindigkeit ausgeführt. Sie werden auf sehr großen Websites verwendet, auf denen ihre Sharding-Funktionen und Fehlertoleranz weit fortgeschritten sind.

Wenn Sie sich an dem Prozess erfreuen, machen Sie sich keine Sorgen um das Ziel, das Sie bereits gewonnen haben.

27
user2567

"(es ist" knotenorientiert ", falls das überhaupt existiert)". - Vielleicht finden Sie deshalb nicht viel!

Tauchen Sie mit Version 0.1 ein und sehen Sie, wo Sie hinkommen. Sie können mehr lernen, wenn Sie versuchen, das zu produzieren, was Sie wollen, indem Sie fragen, was Sie tun sollen. Nehmen Sie sich ein paar Tage Zeit und überprüfen Sie dann, wo Sie es haben.

Vor ungefähr 18 Jahren habe ich ein grundlegendes Datenbanksystem (zum Spaß, go figure) mit btree-Indizes geschrieben und sehr viel gelernt.

6
Jaydee

MySQL hat eine steckbare Speicher-Engine-Struktur. Es könnte eine Idee sein, wie Engines erstellt werden zu überprüfen, um für MySQL zu arbeiten.

4
Mjh

Klingt nach einem großartigen Projekt. Anscheinend besteht Ihr Ziel nicht darin, eine Produktionssoftware zu erstellen, sondern mehr über Datenbanken und den Prozess der Erstellung eines Datenbanksystems zu erfahren.

Ich glaube nicht, dass Sie viel recherchieren müssen. Es scheint, als ob der Zweck darin besteht, Erfahrungen mit der Erstellung eines knotenbasierten Datenbanksystems zu sammeln.

So würde ich anfangen:

  1. Wählen Sie Ihre Lieblingssprache oder eine Sprache, die Sie verbessern möchten.
  2. Erstellen Sie das Knotenobjekt (oder was auch immer in Ihrer Sprache am nächsten ist). Finden Sie heraus, wie Sie sie verknüpfen können.
  3. Erstellen Sie eine kurze Liste der SQL-Anweisungen, die Sie zuerst implementieren werden.
  4. Entscheiden Sie, wie die Daten gespeichert werden sollen. Eine naheliegende Lösung besteht darin, alle Knoten zu serialisieren, sie beim Programmstart zu laden und beim Programmende zu speichern.

Nachdem Sie die Grundlagen zum Laufen gebracht haben, haben Sie viel mehr Einblick in das, was schwierig oder problematisch ist. Dann können Sie etwas darüber recherchieren, einige Verbesserungen finden und sie integrieren.

4
B Seven

Das Schreiben einer eigenen Datenbank „um zu verstehen, wie alles funktioniert“ ist der einzig gute Grund dafür (da Datenbanken verrückt schwer zu finden und schwer zu beweisen sind). Du bist verrückt, aber auf gute Weise!

Um zu sehen, wie es gemacht wird, schlage ich vor, SQLite zu betrachten. 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, von dem ich sicher bin, dass er 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 wirklich zu schreiben [~ # ~] jetzt [~ # ~] ist überraschend schwierig und warum ich so froh bin, dass ich nie eine DB schreiben muss.)

3
Donal Fellows

Kauf ein Buch:

http://www.springer.com/computer/database+management+%26+information+retrieval/book/978-1-84628-394-9

Indizes sind heute imho der wichtigste Aspekt von Datenbanken. Untersuchen Sie die Alternativen, die wie binäre Bäume existieren.

Lesen Sie auch über kartesisches Produkt , um zu berechnen, wie komplex Verknüpfungen sein werden.

3
jgauffin

Ich muss lernen, wie Datenbanken funktionieren

Lerne relationale Algebra.

Suchen Sie eine kleine DB-Engine und lernen Sie die Quelle kennen.

um sie effizienter zu nutzen

Nee. Sie müssen lernen, wie Sie eine Datenbank effizient nutzen können. 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 die traditionellen Wege: Nehmen Sie an einem Kurs teil, lesen Sie ein Buch, lesen Sie Peer Review, stellen Sie Fragen, verwenden Sie den Index luke .

3
Incognito