2012-04-05 8 views
2

Ich habe kürzlich mit Datenbanken gearbeitet und zuvor habe ich eigenständige Komponenten entwickelt, die keine Datenbanken verwenden. Mit all der DB-Arbeit habe ich ein paar Fragen, die aufkamen. Warum ist eine Datenbankabfrage schneller als ein Programmierdatenabruf aus einer Datei?Datenabruf - Datenbank VS Programmiersprache

meine Frage weiter zu erarbeiten -

Angenommen ich eine Tabelle haben Mitarbeiter genannt, mit Felder Name, ID, DOB, E-Mail und Sex. Aus Gründen der Einfachheit gehen wir auch davon aus, dass es sich um Strings mit fester Länge handelt und sie keine Indizes, Primärschlüssel oder andere Einschränkungen haben.

Stellen Sie sich vor, wir haben 1 Million Datenzeilen in der Tabelle. Am Ende des Tages wird diese Tabelle irgendwo auf der Festplatte gespeichert. Wenn ich eine Abfrage schreibe Wählen Sie Name, ID von Mitarbeiter, wo DOB ​​= "12.12.1985", das DBMS nimmt die Daten aus der Datei auf, verarbeitet sie, filtert sie und gibt mir ein Ergebnis, das eine Teilmenge der 1 Million ist Zeilen von Daten.

Nun nehme ich an, ich speichere die gleichen 1 Million Zeilen in einer flachen Datei, wobei jedes Feld der Einfachheit halber eine Zeichenfolge fester Länge ist. Die Daten sind in einer Datei auf der Festplatte verfügbar. Wenn ich ein Programm in C++ oder C oder C# oder Java schreibe und die gleiche Aufgabe mache, den Namen und die ID zu finden, wo DOB ​​= "12/12/1985", lese ich die Datei Datensatz für Datensatz und überprüfe für jede Zeile von Daten wenn der DOB = "12/12/1985", wenn es übereinstimmt, dann speichere ich die Zeile dem Benutzer.

Diese Vorgehensweise ist im Vergleich zur Geschwindigkeit, mit der eine SQL-Abfrage die Ergebnisse zurückgibt, zu langsam.

Ich nehme an, das DBMS ist auch in einer Programmiersprache geschrieben und es gibt auch einen zusätzlichen Aufwand für die Analyse der Abfrage und was nicht.

Was passiert also in einem DBMS, das Daten schneller abruft als über eine Programmiersprache?

Wenn diese Frage in diesem Forum unpassend ist, löschen Sie bitte, aber stellen Sie mir einige Hinweise zur Verfügung, wo ich eine Antwort finden kann.

Ich benutze SQL Server, wenn das hilft.

+1

Caching, Optimierer sind die zwei Dinge, die Db schneller macht. Wenn Sie wissen, in Programmiersprache zu implementieren, dann könnte es die beste sein .. – SenthilPrabhu

Antwort

0

Es gibt viele Techniken, um verschiedene Arten des Zugriffs zu beschleunigen. Wie @Oded sagt, ist die Indizierung die große Lösung für Ihr spezifisches Beispiel: Wenn die Datenbank so eingerichtet wurde, dass ein Index nach Datum beibehalten wird, kann sie direkt zu den Einträgen für dieses Datum gehen, anstatt die gesamte Datei durchzulesen. (Beachten Sie, dass die Pflege eines Indexes Speicherplatz und Zeit in Anspruch nimmt, aber nicht kostenlos ist!)

Auf der anderen Seite, wenn ein solcher Index nicht eingerichtet wurde, und die Datenbank wurde nicht gespeichert Datumsreihenfolge, dann muss eine Abfrage nach Datum durch die gesamte Datenbank gehen, genau wie Ihr Flat-File-Programm.

Natürlich können Sie Ihre eigenen Programme schreiben, um einen Datumsindex für Ihre Datei beizubehalten und zu verwenden, der Datumsabfragen wie eine Datenbank beschleunigt. Möglicherweise möchten Sie andere Indizes hinzufügen, um andere Arten von Abfragen zu beschleunigen oder einen Index zu entfernen, der mehr Ressourcen verbraucht, als er wert ist.

Schließlich kann die Verwaltung aller Funktionen, die Sie Ihrem Dateimanager hinzugefügt haben, zu einer komplexen Aufgabe werden. Vielleicht möchten Sie diese Art von Konfiguration in einer eigenen Datei speichern, anstatt sie in Ihrem Programm zu programmieren. Zumindest werden Sie Funktionen benötigen, um sicherzustellen, dass die Änderung Ihrer Konfiguration Ihre Datei nicht beschädigt ...

Mit anderen Worten, Sie haben Ihre eigene Datenbank geschrieben.

+0

comingstorm große detaillierte Erklärung danke. –

7

Warum ist eine Datenbankabfrage schneller als ein Datum Programmiersprache Abruf aus einer Datei

Das hängt von vielen Dingen - Netzwerklatenz und Plattensuchgeschwindigkeiten zwei der tigeren sein. Manchmal ist es schneller aus einer Datei zu lesen.

In Ihrer Beschreibung der eine Zeile innerhalb einer Million Zeilen zu finden, wird eine Datenbank normalerweise schneller als in einer Datei suchen, weil es Indizierung auf den Daten beschäftigt.

Wenn Sie Ihre Datendatei vorverarbeiten und Indexdateien für die verschiedenen Felder bereitstellen, können Sie die Datensuche auch vom Dateisystem aus beschleunigen.

Hinweis: Datenbanken werden normalerweise nicht für diese Funktion verwendet, sondern weil sie ACID-kompatibel sind und daher für Umgebungen geeignet sind, in denen mehrere Prozesse (normalerweise viele Clients auf vielen Computern) die Datenbank abfragen.

+0

Große Antwort. +1 für die Notiz. – Yavar

+0

Dank Oded, jetzt komme ich auf die Idee. –

0

... ein altes, ich weiß ... für nur, wenn jemand dies findet: Die Frage enthalten „übernehmen ... haben keine Indizes“

... so ist die Frage nach der war sequentieller Datenlese-Kampf zwischen der Datenbank und einer flachen Datei WITHOUT Indizes, die die Datenbank gewinnt ...

Und die Antwort lautet: Wenn Sie Datensatz für Datensatz von Festplatte lesen, tun Sie viele Festplatten suchen, was teuer ist. Eine Datenbank lädt Seiten immer nach Konzept - also ein paar Datensätze gleichzeitig. Weniger Festplattensuche ist definitiv schneller. Wenn Sie einen Mem-gepufferten Lesevorgang aus einer Flat-Datei ausführen würden, könnten Sie die gleichen oder bessere Lesewerte erzielen.