


Der Autor von Go rqlite verrät Ihnen: Wie wichtig Algorithmen bei der Entwicklung von Datenbanksoftware sind!
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.
Leistung ist mehr als nur eine Funktion. Dies ist eine
Anfrage
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.
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
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!

GoimpactsDevelopmentPositivyThroughSpeed, Effizienz und DiasMlitication.1) Geschwindigkeit: Gocompilesquickandrunseffiction, idealforlargeProjects

C eignet sich besser für Szenarien, in denen eine direkte Kontrolle der Hardware -Ressourcen und hohe Leistungsoptimierung erforderlich ist, während Golang besser für Szenarien geeignet ist, in denen eine schnelle Entwicklung und eine hohe Parallelitätsverarbeitung erforderlich sind. 1.Cs Vorteil liegt in den nahezu Hardware-Eigenschaften und hohen Optimierungsfunktionen, die für leistungsstarke Bedürfnisse wie die Spieleentwicklung geeignet sind. 2. Golangs Vorteil liegt in seiner präzisen Syntax und der natürlichen Unterstützung, die für die Entwicklung einer hohen Parallelitätsdienste geeignet ist.

Golang zeichnet sich in praktischen Anwendungen aus und ist für seine Einfachheit, Effizienz und Parallelität bekannt. 1) Die gleichzeitige Programmierung wird über Goroutinen und Kanäle implementiert, 2) Flexibler Code wird unter Verwendung von Schnittstellen und Polymorphismen geschrieben, 3) Vereinfachen Sie die Netzwerkprogrammierung mit NET/HTTP -Paketen, 4) Effiziente gleichzeitige Crawler erstellen, 5) Debuggen und Optimierung durch Tools und Best Practices.

Zu den Kernmerkmalen von GO gehören die Müllsammlung, statische Verknüpfung und Unterstützung der Parallelität. 1. Das Parallelitätsmodell von GO -Sprache realisiert eine effiziente gleichzeitige Programmierung durch Goroutine und Kanal. 2. Schnittstellen und Polymorphismen werden durch Schnittstellenmethoden implementiert, so dass verschiedene Typen einheitlich verarbeitet werden können. 3. Die grundlegende Verwendung zeigt die Effizienz der Funktionsdefinition und des Aufrufs. 4. In der fortgeschrittenen Verwendung bieten Scheiben leistungsstarke Funktionen der dynamischen Größenänderung. 5. Häufige Fehler wie Rassenbedingungen können durch Getest-Race erkannt und gelöst werden. 6. Leistungsoptimierung wiederverwenden Objekte durch Sync.Pool, um den Druck der Müllabfuhr zu verringern.

Go Language funktioniert gut beim Aufbau effizienter und skalierbarer Systeme. Zu den Vorteilen gehören: 1. hohe Leistung: Kompiliert in den Maschinencode, schnelle Laufgeschwindigkeit; 2. gleichzeitige Programmierung: Vereinfachen Sie Multitasking durch Goroutinen und Kanäle; 3. Einfachheit: präzise Syntax, Reduzierung der Lern- und Wartungskosten; 4. plattform: Unterstützt die plattformübergreifende Kompilierung, einfache Bereitstellung.

Verwirrt über die Sortierung von SQL -Abfragenergebnissen. Während des Lernens von SQL stoßen Sie häufig auf einige verwirrende Probleme. Vor kurzem liest der Autor "Mick-SQL Basics" ...

Die Beziehung zwischen Technologiestapelkonvergenz und Technologieauswahl in der Softwareentwicklung, der Auswahl und dem Management von Technologiestapeln ist ein sehr kritisches Problem. In letzter Zeit haben einige Leser vorgeschlagen ...


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

SAP NetWeaver Server-Adapter für Eclipse
Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

Herunterladen der Mac-Version des Atom-Editors
Der beliebteste Open-Source-Editor

ZendStudio 13.5.1 Mac
Leistungsstarke integrierte PHP-Entwicklungsumgebung

VSCode Windows 64-Bit-Download
Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung