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.
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
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.
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.
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.
Leistung ist mehr als nur eine Funktion. Dies ist eine
Anfrage
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
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“
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.
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:
. 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
Ü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!