Verringern SSDs den Nutzen von Datenbanken?


28

Ich habe heute nur von Robert Martin gehört, und es scheint, dass er eine bemerkenswerte Figur in der Software-Welt ist. Ich meine also nicht, dass mein Titel so aussieht, als wäre es ein Klick-Köder oder ich stecke ihm Worte in den Mund, aber das ist einfach wie ich das, was ich von ihm hörte, mit meiner begrenzten Erfahrung und meinem begrenzten Verständnis interpretierte.

Ich habe mir heute ein Video (zur Softwarearchitektur) mit einem Vortrag von Robert C. Martin angesehen, und in der zweiten Hälfte des Videos stand das Thema Datenbanken im Mittelpunkt.

Nach meinem Verständnis der Äußerungen schien es, als würde er sagen, dass SSDs den Nutzen von Datenbanken ( erheblich ) verringern .

Um zu erklären, wie ich zu dieser Interpretation gekommen bin:

Er diskutierte, wie das Abrufen von Daten mit Festplatten / rotierenden Festplatten langsam ist. In diesen Tagen verwenden wir jedoch SSDs, bemerkte er. Er beginnt mit "RAM kommt" und erwähnt dann RAM-Datenträger, sagt dann aber, dass er ihn nicht RAM-Datenträger nennen kann, und greift daher einfach auf RAM zurück. Bei RAM brauchen wir die Indizes nicht, da jedes Byte die gleiche Zeit benötigt, um abgerufen zu werden. ( Dieser Absatz wird von mir umschrieben )

Daher macht es keinen Sinn, RAM (wie im Computerspeicher) als Ersatz für DBs (wie ich seine Aussage interpretiert habe) vorzuschlagen, weil das heißt, alle Datensätze werden im Arbeitsspeicher während der Lebensdauer einer Anwendung verarbeitet ( es sei denn, Sie ziehen bei Bedarf von einer Datenträgerdatei)

Also habe ich mich mit RAM beschäftigt, er meint SSD. In diesem Fall, so sagt er, verringern SSDs den Nutzen von Datenbanken. Er sagt sogar: "Wenn ich Oracle wäre, hätte ich Angst. Das Fundament, warum ich existiere, verdunstet."

Nach meinem kleinen Verständnis von SSDs sind SSDs im Gegensatz zu HDDs, bei denen es sich O(n)um Suchzeiten handelt (glaube ich), nahe O(1)oder fast zufällig. Also, sein Vorschlag war interessant für mich, weil ich noch nie so darüber nachgedacht habe. Als ich vor einigen Jahren zum ersten Mal in Datenbanken eingeführt wurde, als ein Professor die Vorteile gegenüber dem regulären Dateisystem beschrieb, kam ich zu dem Schluss, dass die Hauptaufgabe einer Datenbank im Wesentlichen darin besteht, ein sehr indiziertes Dateisystem zu sein (sowie Optimierungen, Caching, gleichzeitiger Zugriff, etc). Wenn also keine Indizes in SSD benötigt werden, macht diese Art von Datenbanken weniger nützlich.

Ungeachtet dessen fällt es mir schwer zu glauben, dass sie weniger nützlich sind, da jeder DBs als Hauptanwendungspunkt anstelle des reinen Dateisystems verwendet und das Gefühl hat, er sei zu stark vereinfacht die Rolle von Datenbanken.

Hinweis : Ich habe bis zum Ende zugesehen, um sicherzustellen, dass er nichts anderes gesagt hat.

Als Referenz: 42:22, wenn das gesamte Thema der Datenbank auftaucht, 43:52, wenn er mit "Warum haben wir überhaupt Datenbanken ? " Beginnt.

Diese Antwort besagt, dass SSDs DBs erheblich beschleunigen. In dieser Frage wird gefragt, wie die Optimierung geändert wird.

Für TL; DR ist meine Frage, ob das Aufkommen einer weit verbreiteten SSD-Nutzung auf dem Servermarkt (ob in Kürze oder bereits geschehen) den Nutzen von Datenbanken verringert.

Es schien so, als wollte der Moderator vermitteln, dass man mit SSDs die Daten auf der Festplatte speichern kann und sich keine Gedanken darüber machen muss, wie langsam der Abruf sein würde, da bei älteren HDDs wie bei SSDs die Suchzeiten in der Nähe sind O(1)(Ich glaube). Wenn dies zutrifft, verliert dies hypothetisch einen der Vorteile: die Indizierung, da der Vorteil, über Indizes für schnellere Suchzeiten zu verfügen, entfällt.

Antworten:


59

Es gibt einige Dinge in einer Datenbank, die optimiert werden sollten , wenn Sie SSDs verwenden. Zum Beispiel spricht für PostgreSQL können Sie einstellen effective_io_concurrency, und random_page_cost. Schnelleres Lesen und schnellerer Direktzugriff sind jedoch nicht das, was eine Datenbank tut. Es sorgt dafür

Er ist nur falsch über Indizes. Wenn die gesamte Tabelle in RAM eingelesen werden kann, ist ein Index dennoch nützlich. Glaubst du mir nicht? Lassen Sie uns ein Gedankenexperiment machen,

  • Stellen Sie sich vor, Sie haben eine Tabelle mit einer indizierten Spalte.

    CREATE TABLE foobar ( id text PRIMARY KEY );
  • Stellen Sie sich vor, die Tabelle enthält 500 Millionen Zeilen.

  • Stellen Sie sich vor, alle 500 Millionen Zeilen werden zu einer Datei zusammengefügt.

Was ist schneller,

  1. grep 'keyword' file
  2. SELECT * FROM foobar WHERE id = 'keyword'

Es geht nicht nur darum, wo sich Daten befinden, sondern auch darum, wie Sie sie bestellen und welche Vorgänge Sie ausführen können. PostgreSQL unterstützt B-Tree-, Hash-, GiST-, SP-GiST-, GIN- und BRIN-Indizes (und Bloom über eine Erweiterung). Es wäre töricht zu glauben, dass all diese Berechnungen und Funktionen wegfallen, weil Sie einen schnelleren Direktzugriff haben.


31
Nur ein Nachtrag - OP sollte darauf achten, dass "wahlfreier Zugriff" nicht mit "inhaltsadressierbarem Zugriff" in Verbindung gebracht wird. Wie OP bemerkt, bedeutet "Direktzugriff", dass das Erreichen jedes Speicherbytes 0 (1) ist. Das FINDEN von Daten in diesem "Direktzugriffsspeicher" erfordert jedoch immer noch ein sequentielles Durchsuchen; das heißt, Sie können nicht auf den Speicher stellen „finden Sie mir die Daten , die aussieht wie diese “ und haben es dir magisch geben.
Bob Jarvis - Wiedereinsetzung von Monica

2
@ BobJarvis Du hast recht. Ihr Kommentar hilft dabei, noch mehr aufzuklären. @ EvanCarrolls Beispiel "Was ist schneller?" Zeigt, warum Indizierung und sogar Subindizierung O(1)keine Rolle spielen. Für die Anwendungsfälle, die eine DB bereitstellt, reicht es nicht aus , sie einfach zu erfassen
Abdul

12

Auf der Grundlage Ihres Beitrags scheint die eindeutige Meldung zu lauten, dass die RDBMS-Suchzeitoptimierungen durch Hardware ersetzt werden, wodurch die E / A-Zeit vernachlässigbar wird.

Das ist absolut richtig. SSD auf Datenbankservern in Kombination mit hohem (tatsächlichem) RAM verkürzt das Warten auf E / A erheblich. Die Indizierung und Zwischenspeicherung von RDBMS ist jedoch nach wie vor von Nutzen, da selbst Systeme mit diesem riesigen E / A-Segen E / A-Engpässe aufgrund von Abfragen mit schlechter Leistung aufweisen können und werden, die durch eine schlechte Indizierung verursacht werden. Dies ist normalerweise nur bei Anwendungen mit hoher Auslastung oder schlecht geschriebenen Anwendungen der Fall.

Der Schlüsselwert für RDBMS-Systeme im Allgemeinen ist Datenkonsistenz, Datenverfügbarkeit und Datenaggregation. Die Verwendung einer Excel-Tabelle, einer CSV-Datei oder einer anderen Methode zum Speichern einer "Datenbank" bietet keine Garantie.

SSD schützt Sie nicht vor dem Ausfall Ihres Primärservers (Netzwerk, Betriebssystembeschädigung, Stromausfall). SSD schützt Sie nicht vor einer schlechten Datenänderung. SSD macht es nicht schneller, Analysen auszuführen, als sie nur zu haben.


Obwohl ich ein besseren Einblick gewonnen habe, war ich im Zusammenhang mit den rohen SSD - Datenspeichern vs Datenspeicherung auf einer DB w / HDD zu fragen, und Ihre Antwort ist im Zusammenhang mit der DB auf SSD (aufgrund schlechter Frage Phrasierung von mir)
Abdul

4
@Abdul Das ist ein Vergleich zwischen Äpfeln und Hängebrücken. Ein Raw-Gerät verschafft Ihnen viel Speicherplatz. Mit einer Datenbank können Sie diesen Speicher nach einem Datenmodell organisieren und darauf zugreifen. Hier geht es darum, dass Sie, wenn Sie mit den sternenklaren Augen darüber nachdenken, dass eine rohe SSD eine wunderbare Sache ist, weil sie "schnell" ist und Sie nur Code schreiben, um all Ihre Daten auf diesem rohen Volume zu speichern Sie werden am Ende eine Datenbank schreiben.
Blrfl

8

Onkel Bob sprach wahrscheinlich von In-Memory-Datenbanken wie Redis oder Gemfire . In diesen Datenbanken ist wirklich alles in der Datenbank im RAM enthalten. Die Datenbank kann zunächst leer und mit kurzlebigen Daten (die als Cache verwendet werden) abgelegt werden.

Dies wird immer beliebter, da der Arbeitsspeicher immer billiger wird und es möglich ist, ein Terabyte an Daten in einer speicherinternen Cluster-Datenbank zu speichern. Es gibt viele Anwendungsfälle, in denen es aufgrund der Geschwindigkeit, mit der ein sofortiger Zugriff auf Dinge möglich ist, wertvoll ist, RAM zu verwenden, anstatt sogar eine schnelle Festplatte wie SSD. Sie können für einige davon sogar weiterhin SQL verwenden, wenn dies sinnvoll ist.

Warum sollte dies Oracle Sorgen machen? Daten wachsen und es ist unwahrscheinlich, dass RDBMSes verschwinden. Im Laufe der Jahre hat Oracle jedoch viel Entwicklungszeit aufgewendet, um das Abrufen von Daten auf sich drehenden Datenträgern wirklich schnell zu machen. Oracle muss sich auf eine völlig andere Speicherebene einstellen. Sie sind mit Oracle Database In Memory einer anderen Konkurrenz ausgesetzt als in der Vergangenheit. Überlegen Sie, wie viel Zeit Sie aufgewendet haben, um sicherzustellen, dass das Abfrageoptimierungsprogramm die richtigen Strategien basierend auf dem Layout der Elemente auf der Festplatte auswählt.


Ah. Ich wusste dort nie Dinge wie In-Memory-Datenbanken
Abdul

1
Als weiteres Beispiel kann SQLite im Speicher ausgeführt werden, sodass keine andere Datenbank verwendet werden muss
user151019 24.12.16

8

Community Wiki-Beitrag, der Antworten sammelt, die ursprünglich als Fragenkommentare hinterlassen wurden


Ich würde genau das Gegenteil sagen. Da die Lese- / Schreibgeschwindigkeit so hoch ist, können Sie jetzt mit einer GPU-beschleunigten Datenbank (z. B. BlazingDB oder Alenka ) Zahlen noch schneller verarbeiten. Jetzt können Sie noch komplexere Abfragen schneller ausführen. Jetzt können Abfragen, die nicht einmal ausgeführt werden sollten, mit einer angemessenen Geschwindigkeit ausgeführt werden. Je komplexer und je mehr Daten, desto besser geht es Ihnen - Cybernard

Während Bob Martin schon lange dabei ist und seine Meinungen im Allgemeinen zu hören sind (wenn nicht sogar zuzustimmen mit :-), denke ich, dass er in diesem Fall in die Menge "Der Tod relationaler Datenbanken liegt vor uns" eintaucht (von denen Ich bin assoziiertes Mitglied :-). Für einige Dinge unter bestimmten Umständen kann ein wenig überzeugendes Argument sein, dass nicht-relationale Datenbank - Technologien einen Vorteil bieten. Allerdings bietet IMO, das relationale Modell, das in vielerlei Hinsicht fehlerhaft ist, immer noch das derzeit beste Allzweck-Datenbankmodell. YMMV. - Bob Jarvis

Der Hauptgrund für die Verwendung von Datenbanken liegt nicht darin, dass Festplatten langsam sind (ursprünglich wurde dies als Grund dafür angeführt, keine Datenbanken zu verwenden), sondern darin, dass Daten kompliziert sind . Der Hauptzweck einer Datenbank besteht darin, dass mehrere Apps / Benutzer in der Lage sind , die richtigen Daten zu finden und sie sogar kontrolliert gleichzeitig zu ändern. Das schnell zu tun, ist nur ein sekundäres Ziel von Datenbanken. - RBarryYoung

RDBMS wird nicht so schnell verschwinden. Sie sind die beste Wahl für einige Arten von Anwendungen, und NoSQL (Mongo usw.) ist die beste Wahl für andere. Pferde für Kurse. - sh1rts

Die Datenbank hilft beim Organisieren von Daten. Es war ohnehin nicht wirklich für den schnellen Zugriff auf Daten ausgelegt. - JI Xiang

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.