Heim  >  Artikel  >  Backend-Entwicklung  >  Der Autor von Go rqlite verrät Ihnen: Wie wichtig Algorithmen bei der Entwicklung von Datenbanksoftware sind!

Der Autor von Go rqlite verrät Ihnen: Wie wichtig Algorithmen bei der Entwicklung von Datenbanksoftware sind!

藏色散人
藏色散人nach vorne
2022-01-22 09:19:495027Durchsuche

Dieser Artikel wird durch die Tutorial-Kolumne von golang zum Thema „Der Autor von Go rqlite sagt Ihnen: Wie wichtig ist der Algorithmus bei der Entwicklung von Datenbanksoftware!“ eingeleitet! 》Ich hoffe, es wird Freunden in Not helfen!

- ein faszinierender Job. Ich beschäftige mich seit zwei Jahren intensiv mit der Entwicklung von Open-Source-Datenbanken und die Datenbankprogrammierung ist wahrscheinlich das inspirierendste Projekt, das man als Softwareentwickler machen kann.

Was jedoch wirklich schockierend ist, ist, wie sehr sich meine Einstellung gegenüber Datenbanken in den letzten 6 Jahren verändert hat. Nachdem ich anfangs desinteressiert war, fange ich mittlerweile an zu denken, dass Datenbanksysteme der Höhepunkt der Softwareentwicklung sind.

Ich weiß nicht, was besser wäre

Die meiste Zeit meiner Karriere habe ich nur Erfahrungen mit Datenbanken gemacht, indem ich darüber gelesen habe. Normalerweise in einem langweiligen Kontext – schlagen Sie ein beliebiges Lehrbuch über Datenbanken für Studenten auf und Sie werden sehen, was ich meine. Normalerweise sehen Sie die folgende Tabelle als typischen Anwendungsfall einer relationalen Datenbank:

ID FIRST LAST TITLE DEPARTMENT
1 Robert Kelly Regisseur Marketing
2 Tom Burke Vertreter Vertrieb
3 John Smith Vizepräsident Ausverkauf

Kannst du noch mehr langweiliges Zeug lesen? Wenn es hier nur um Datenbanken geht, möchte ich damit nichts zu tun haben. Was ist der Sinn? Software ist viel cooler als das, oder? Deshalb habe ich lange Zeit alles, was mit Datenbanken zu tun hatte, völlig gemieden

Man vergisst nie seine erste CRUD-Anwendung

2009, nachdem ich jahrelang eingebettete Software, Linux-Gerätetreiber und Websoftware geschrieben hatte, leitete ich ein Team, das es brauchte ein webbasiertes System aufbauen. Sie sehen, die AWS-Cloud ist angekommen und die MAC-Adressen der cloudbasierten Lizenzierungstechnologie sind nicht mehr gültig. Mein Team muss ein Lizenzportal für unsere neue EC2-basierte Software-Appliance erstellen. Da wir viel Erfahrung mit Python hatten, haben wir uns für Django entschieden, das auf MySQL läuft. Es ist etwas Neues passiert. Ich habe tatsächlich mit der Arbeit an der Datenbank begonnen.

Als die Entwicklung von CRUD-Anwendungen in den Ebenen unseres Landes voranschritt, wurde mir langsam klar, wie wichtig die Datenbank ist – wie wichtig sie für unsere Systeme ist. Wenn wir die Datenbank verlieren, ist unsere Softwareentwicklung umsonst. Wenn die Datenbank Daten beschädigt, kann es sein, dass die Geräte unserer Kunden nicht mehr lizenziert werden und ihre Netzwerke nicht mehr funktionieren. Wenn die Datenbank nicht ordnungsgemäß funktioniert, sind Tausende von Menschen gleichzeitig betroffen. Aber nichts davon ist passiert. Die Datenbank funktioniert immer . Es enttäuscht uns nie. Ich bin beeindruckt.
Später entdeckte ich Fremdschlüsseleinschränkungen, Eindeutigkeitsbeschränkungen, referenzielle Integrität, Indizes (denken Sie daran, dass ich zu diesem Zeitpunkt noch nichts über diese Dinge weiß) – Datenbanken können mir auf verschiedene Weise beim Aufbau eines robusteren Systems helfen. Endlich wurde mir klar, dass moderne Datenbanken erstaunlich sind – Datenbanken sind die langweiligsten Dinge der Welt , bis man tatsächlich ein System mit ihnen aufbauen muss.

Man vergisst auch nie sein erstes Suchsystem

Bis 2012 leitete ich ein Team, das ein großes Indexierungs- und Suchsystem basierend auf einer großen Schlüsselwertdatenbank aufbaute, dessen Kern die elastische Suche war. Es ist augenöffnend zu sehen, was ein System wie Elasticsearch leisten kann – eine Technologie, die auf erstklassiger Indizierung basiert – selbst wenn darunter Terabytes an Protokolldaten liegen.
Mittlerweile habe ich sogar Datenbanken und Suchsysteme scheitern sehen, aber die Datenbanktechnologie fasziniert mich. Im Jahr 2014 schloss ich mich einem kleinen engagierten Team an, das den Kern der [Open-Source-Zeitreihendatenbank] (github.com/influxdata/influxdb) entwickelte.

Die Algorithmen, die ich gelernt habe, sind nur in der Datenbankentwicklung wirklich wichtig. Nur in China Ist die Big-O-Analyse wirklich lebendig geworden? Datenbanken gehören zu den wenigen Anwendungen, bei denen Programmierer immer noch Millionen von Objekten in Schleifen verarbeiten, sortieren und filtern müssen. Dies ist einer der wenigen Orte, an denen viel von dem langweiligen Stoff, den man im CS-Unterricht lernt, wichtig ist.

Bei vielen anderen Softwareentwicklungen ist das nicht der Fall. Boot-ROM-Firmware schreiben? Nein, Algorithmen waren für mich nie wichtig. Tuner-Gerätetreiber? Nein, das spielt keine Rolle. Software zur Netzwerkgeräteverwaltung? CRUD-Anwendung? Kaum alle dieser Disziplinen erfordern unterschiedliche Fähigkeiten und Kenntnisse. Meistens habe ich in Interviews nur über die Laufzeitkomplexität gesprochen.

Aber mit der Entwicklung von Datenbanken hat sich das alles geändert. Es ist wunderbar zu sehen, dass ein System aufgrund von Algorithmusänderungen tatsächlich die richtigen Ergebnisse liefert, aber nur für einen Bruchteil der Zeit, und dass dies in Ihrem Code, in dem System, das Sie erstellt haben, geschieht.

Auch die Leistung ist wichtig


Es gibt eine alte Softwaregeschichte, die so lautet: Ein Programmierer schreibt Code, der zehnmal schneller läuft als die vorherige Version. Er zeigte es, aber jemand wies darauf hin, dass die erzeugten Daten geringfügig von den korrekten Daten abwichen. „Aber es ist zehnmal schneller“, betonte der Programmierer. „Nun, wenn es nicht korrekt sein muss, kann ich eine Version erstellen, die überhaupt keinen Platz beansprucht und unendlich schnell läuft“, antwortete ein anderer.

Diese Moralgeschichte hatte schon immer einen großen Einfluss auf mich. Recht zu haben ist immer wichtiger als alles andere. Es ist wahr. Aber es lässt mich auch glauben, dass Projekte einfach deshalb wertvoll sind, weil sie die richtigen Ergebnisse liefern.

Bei Datenbanken ist dies nicht der Fall.

Leistung ist mehr als nur eine Funktion. Dies ist eine
Anfrage

. Wer bereit ist, für Datenbanken zu zahlen, tut dies oft, weil er über große Datenmengen verfügt. Wenn die Datenbank in dieser Situation keine gute Leistung erbringt – wenn sie Ergebnisse nicht schnell und effizient zurückgibt –, funktioniert sie möglicherweise überhaupt nicht.

Denken Sie, dass Schreibsysteme kompliziert sind?

Ich glaube, das, was mich bei der Entwicklung von Datenbanken am meisten schockiert hat, war, wie komplex Abfrage-Engines geworden sind. Ich habe viel Erfahrung im Aufbau von Systemen, die Daten auf Festplatte schreiben und speichern. Es kann eine große Herausforderung sein, diese Systeme gut funktionieren zu lassen.
Aber diese Komplexität ist normalerweise viel geringer als die der Abfrage-Engine. Ein flexibles Abfragesystem – der effektive Aufbau eines Systems zur Beantwortung von Fragen, wenn Sie nicht wissen, um welche Fragen es sich handelt – erfordert ernsthaftes Design-Denken. Der Abfrageplaner muss gültig sein. Abfragesysteme müssen viele orthogonale Anforderungen unterstützen – Filtern nach bestimmten Dimensionen, Gruppieren nach anderen Dimensionen, Zusammenführen von Daten aus verschiedenen Tabellen – und manchmal auch die Unterstützung von Daten aus externen Quellen. Schließlich muss das Abfragesystem effizient sein und eine gute Leistung erbringen. Dies führt zu einem Spannungsverhältnis zwischen Abstraktion und Optimierung bei Design und Implementierung, das echtes Geschick erfordert, um gut damit umgehen zu können. In der realen Welt muss sie betrieben werden

Jede wichtige Datenbank muss grundlegende Vorgänge wie Sicherung, Wiederherstellung, Fragmentierungsverwaltung und Überwachung unterstützen.

Wenn ich als seriöser Betreiber Ihre Datenbank nicht sichern kann, kann ich sie ganz einfach nicht verwenden. Es spielt keine Rolle, wie schnell die Datenbank Schreibvorgänge akzeptiert. Während einer Abfrage spielt es keine Rolle, wie klein der Speicherbedarf ist. Wenn ich die Daten in der Datenbank nicht vor Fehlern schützen kann, die außerhalb Ihrer Kontrolle, dem Ersteller der Datenbank, liegen, kann ich sie nie problemlos ausführen.

Natürlich gibt es viele Möglichkeiten, eine Datenbank ohne Mitarbeit der Datenbank zu sichern. Aber integrierte Methoden sind normalerweise am besten. Dies ist auch meine Empfehlung für rqlite v2.0. Wenn ich möchte, dass jemand rqlite ernsthaft nutzt, muss ich das reale Problem lösen, bei dem das System völlig ausfallen und sehr lange hinter den Daten zurückbleiben kann.

Wenn Sie also eine Datenbank entwerfen und implementieren, bauen Sie von Anfang an eine operative Unterstützung auf. Machen Sie es zu einem grundlegenden Bestandteil Ihres Designs. Ihre Nutzer werden es Ihnen danken.

Die Antwort lautet normalerweise „Es kommt darauf an“

Wenn Sie zum ersten Mal mit einer Datenbank arbeiten, insbesondere als Betreiber, stellen Sie sich oft die Frage: Mit welcher Geschwindigkeit kann das System indiziert werden? Wie schnell wird auf Anfragen reagiert? Wie viel Speicherplatz benötige ich? Wie groß kann ein Trümmerstück sein und trotzdem funktionieren? Wie kann ich es beschleunigen? Alle fragten ohne Vorbehalt. Früher habe ich es selbst gemacht.

Vielleicht können Sie mit den Datenbankprogrammierern sprechen und ihnen diese Fragen stellen. Und die Antwort, die Sie oft – vielleicht sogar jemals – bekommen werden, ist:

Es liegt an Ihnen. Man muss Benchmarking durchführen, man muss messen
. Das kann irritierend sein und den Eindruck erwecken, dass Sie sich der Verantwortung entziehen. Aber das ist nicht der Fall.

Wenn ich jetzt Fragen wie diese höre, lächle ich. Zu naiv.

Die Indexierungsrate kann von der Größe der Daten abhängen, nicht nur von der Anzahl der Dokumente oder Datenpunkte. Dies kann von der Stapelverarbeitung, der Kardinalität der Daten, davon abhängen, ob die Datenbank geclustert ist, welche Spalten und Felder in den Daten indiziert sind, ob es sich um neue Daten oder eine Aktualisierung bestehender Daten handelt, vom Computer, auf dem die Datenbank ausgeführt wird, RAM, E/A-Leistung und die verwendete Replikation.
Die Variablen, die die Leistung steuern, enden nie.
Bei Abfragen kann es vom Zeitbereich der Zeitreihendaten abhängen. Dies hängt von der Anzahl der getroffenen Datensätze, der Anzahl der abgefragten Felder, davon ab, ob ein Bereichsscan beteiligt ist, ob die Daten indiziert sind, von der Art des verwendeten Index, von der Anzahl der Shards, auf die zugegriffen werden kann, und davon, ob die Daten lokal sind. und Maschineneigenschaften. Ist es auf Lager? Wird es gewartet? Ist das Netzwerk ausgelastet?

Die Antwort lautet also immer:

Es kommt darauf an

. Datenbankdesigner sind ehrlich. Sie können alles über das System wissen, das sie aufgebaut haben, ohne die Antworten auf Ihre Fragen zu kennen. Programming Bucket List

Wenn es einen Ratschlag für Entwickler gibt, die ihre Programmierkenntnisse verbessern möchten, wäre es, einem Datenbankentwicklungsteam beizutreten. Meine Programmierkenntnisse haben sich durch die Datenbankentwicklung enorm verbessert – es war eine wundervolle Programmiererfahrung.

Originaladresse: https://www.philipotoole.com/what-i-learned-from-programming-a-database/

Übersetzungsadresse: https://learnku.com/go/t/64605

Das obige ist der detaillierte Inhalt vonDer Autor von Go rqlite verrät Ihnen: Wie wichtig Algorithmen bei der Entwicklung von Datenbanksoftware sind!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen