Christian Kruse: Effizienz-Vergleich MySQL-Eintrag vs. Datei-Eintrag

Beitrag lesen

Hallo Ilja,

zuerst mal: es heisst der Index und die Indizes ;-)

Diese Caches werden durch den Kommunikations-Overhead locker
wieder aufgeholt.

was ich einfach mal anzweifel. auf die festplatte zuzugreifen ist
wesentlich langsamer als ein paar overhead anweisungen.

*g* Du solltest dich darüber informieren, wie Netzwerk-Anwendungen
funktionieren und wie der Overhead hier definiert ist. Erstens macht
die Anbindung und zweitens die Abstraktion über das Protokoll das
ganze ziemlich teuer. Und jetzt komm mir nicht mit UNIX Domain
Sockets, auch hier ist der Protokoll-Overhead extrem teuer -- und
zu diesem Protokoll-Overhead kommt der HD-Overhead (sic!) hinzu.
Glaube mir, hier weiss ich, wovon ich rede.

Dafür muss ein (ziemlich komplexer) Interpreter angeworfen werden,
ein Optimizer, etc, pp.

für den es widerum auch einen cache gibt und somit ausführungpläne
ebenfalls schon vorliegen oder ich ihm genau sagen kann, wie man
vorgeht.

Öhm -- und?

nein, wie oben beschrieben geht sie anders vor. nimm einen
update befehel, die datenbank wird viel schneller wissen, wo
sich der datensatz befindet, ergo kann sie auch schneller
schreiben.

Quatsch. Warum sollte eine DB das schneller wissen?

woher willst du den ohne indizierung wissen, welche datenzätze alle
angefasst werden müssen, ohne einen full scan durchzuführen ?

Herjemine. Sortierte Daten halt. Warum sollte es langsamer sein?

Dito Dateien. Gerade auf RAID-Systemen werden Änderungen viel
später geschrieben, als sie in Auftrag gegeben wurde.

aber nur wenn sie über eine batterie pufferung verfügen, ansonsten
ist dieser cache auszuschalten, weil es sonst zu inkonsisten im
falle eines plattencrash kommt.

Im Falle eines Stromausfalls meinst du.

Indizes sind ein Hinweis für die Datenbank, dass es sich hier
lohnen kann, auf eine andere Art als linear zu suchen. Das
heisst, bei einer eigenen Umgebung brauche ich keine Indizes.
nein, da irrst du dich.

Wobei?

ob sich ein indize lohnt oder nicht, hat nichts mit einer
datenbank oder eigenen lösung zu tun. es kann sich durch aus
auch bei einer eigenen lösung lohnen, linear zu suchen.

Sorry, aber ich glaube, du bist ein bisschen verwirrt und/oder hast
gar nicht verstanden, was ich dir sagen will.

Hae? Natürlich ist die Entscheidung, ob ich einen Idex benutze
und welche, unabhängig von meiner Umgebung. Das habe ich doch
gar nicht bestritten?

doch siehe oben. da schreibst du, bei einer eigenen umgebung
braucht man keinen indize, sprich keine sortierung und nichts
anderes ist ein indize.

Eben. Ich brauche keinen Index bei sortierten Daten.

Nochmal, langsam zum mitschreiben: Ich brauche keine Indizes. Ich
kann problemlos auch ohne arbeiten.

das würde bedeuten ohne sortierung zu arbeiten, bzw. maximal mit
nur einer

Ja.

und dann muss auch jedesmal der gesamte datenbestand sortiert
werden, wenn neue einträge hinzukommen oder alte gelöscht werden.

Quatsch. Das hiesse ja, eine Datenbank müsste jedesmal den Index
komplett neu erstellen. Wie komst du auf so einen Unfug?

Und ich brauche Indizes nicht, weil ich selber bestimme, wie meine
Daten physikalisch organisiert sind. Es gibt durchaus
Speichermethoden, die einem das Suchen ohne Indizes erlauben.

wo wir wieder bei der datenabhängikeit wären und vor allem, kann
sie nur auf eine besttimmte art und weise optimieren. eine
datenbank kann dass unterschiedlich.

Ich auch, wenn ich das möchte. Da wären dann allerdings Indizes
sinnvoll.

ohhhh, ich glaube jetzt sehe ich deinen denkfehler. erstens sind
eventuell die 20 vergleiche immer noch mehr als über eine
datenbank.

Quatsch. Auch eine Datenbank muss sogar uU mehr als 20 Vergleiche
starten, da sie im Normalfall nicht mit Bin-Bäumen sondern mit
B-Trees (Balanced Trees) arbeitet.

das ist schlicht falsch diese aussage. datenbanken kennen mehr
als nur den b-baum,

Ich sagte 'im Normalfall'. Ich sagte nicht 'ausschliesslich'. Das
Datenbanken auch andere Index-Typen kennen weiss ich selber. Und
ich hoffe dir ist auch bewusst, das es nur an mir liegt, wie ich
meine Daten organisiere.

ABER die daten liegen in keiner sortierung vor, dort liegt dein
denkfehler.

Natürlich liegen sie sortiert vor. Ich entscheide, wie die Daten
physikalisch vorliegen, also kann ich sie auch sortiert speichern.

na klar, und wenn neue daten dazu kommen, geändert oder gelöscht
werden, dann sortierst du einfach mal so nebenbei den gesamten
datenbestand gleich immer mit.

Lies am besten mal ein gutes Buch über Algorithmen und
Datenstrukturen.

aber egal, ich werde dir eine einfach aufgabe stellen, die du mit
deiner methode nicht lösen wirst. was ist, wenn du eine
sortierung über den nachnamen brauchst, aber auch eine über den
ort einer person. damit hättest du zwei unterschiedliche
sortierungen, könntest aber nur eine physikalisch abbilden,
es sei denn, du speichert die kompletten daten zweimal ab
oder aber du führst indize ein, wo wir wieder bei datenbanken
sind und warum sie effektiver arbeiten.

[ ] Du hast mich verstanden.
Datenbanken sind nur die Verallgemeinerung und Standardtisierung von
spezialisierten Datei-Algorithmen. Eine spezialisierte Lösung *muss*
immer schneller sein, weil sie viel, viel weniger beachten muss.
Dafür wird sie auch immer *viel* mehr Arbeit und höhere
Fehleranfälligkeit bedeuten.

und auch beim schreiben muss eine datenbank nicht immer
gleich alle daten schreiben, sondern eben nur die wirklich
neuen,

Dito bei Dateien.

wie soll das gehen, jemand ändert daten, die dann aber nicht
festgeschrieben werden

Hab ich geschrieben, dass ich geänderte Daten nicht schreibe? Nein,
habe ich nicht. Hast du geschrieben, dass du geänderte Daten nicht
schreibst? Nein, hast du nicht. Was also hat das ganze mit dem Zitat
oben drüber zu tun?

eine datendank kann dies aber abfagen, da dort nicht diekt
zugegriffen wird.

Stell dir vor, es gibt auch DBMS, die *nicht* mit SQL und/oder als
Server-System arbeiten.

auch das ist falsch. nehmen wir an, er speichert eine
bestellung. dazu braucht man in der dateispeicherung alle
daten, zum beispiel welche firma bestellt hat mit ihreren
gesamten daten. eine datenbank wird diese daten nicht mehr
speichern, da sie logische verknüpfungen zwischen den
einzelnen entities kennt, die über primär und fremdschlüssel
realisiert sin.

Ja. Und? Glaubst du ernsthaft, dass kann ich nicht auch mit
Dateien so machen?

nein, kannst du nicht es sei den, du machst genau das, was eine
datenbank nun mal machen muss, um das zu erreichen. aber dann
haben wir ja eben ein DBMS.

Nein, wir haben eine _spezialisierte_ Form eines DBMS.

Umgekehrt wird ein Schuh draus. Die Datenbank macht das
verallgemeinert, was man früher "zu Fuss" gemacht hat. Und da ich
weiss, wie die Daten aussehen, brauche ich keine Indizes.

nein, eine datenbank macht wesentlich mehr, als man früher in der
lage war zu tun.

Quatsch. Ich habe dir schon einmal erklärt, dass auch Datenbanken nur
mit Wasser kochen.

Wie gesagt. Der Grund, warum man (unter diesem Gesichtspunkt) eine
Datenbank benutzt, ist die Tatsache, dass es eine Heidenarbeit
ist, das ganze per Fuss zu machen.

nein wie bereits oben gesagt

Du hast mir oben nur bewiesen, dass dir ein Grundverständnis der
entsprechenden Algorithmen und Arbeitsweisen fehlt.

und von dir auch nicht angezweifelt ging es primär um
datenunabhängigkeit.

Datenunabhängigkeit? Ich denke mal, du meinst damit die Abstraktion
der Zugriffsmethode und die damit fehlenden Probleme der Anpassung.

Grüße,
 CK

--
Nur die Weisesten und die Dümmsten können sich nicht ändern.