Ilja: Effizienz-Vergleich MySQL-Eintrag vs. Datei-Eintrag

Beitrag lesen

yo,

ohne jetzt hier eine grundsatzdiskussion loszulassen, lass uns mal punkt für punkt durchgehen. als erstes den sinn einer datenbank, warum man so etwas überhaupt macht. datenbanken sind wie alles gewachsen, sprich aus problemen enstanden. früher ist man genau den weg gegangen, den du hier beschreibst, jedes programm hatte seine daten in dateien geschrieben.

Das geht recht problemlos auch mit Dateien.

und genau das geht eben nicht, aus diesem grund gibt es datenbanken. stell dir mal vor, du hast deine datendateien und ein programmierer findet nun eine besser möglichkeit daten zu speichern und wieder abzurufen. dann muss nicht nur er sein programm ändern, sondern alle anderen programe müssen dies auch tun. und auch die strukturen der daten müssen übereinstimmen. aber nicht jedes programm will die gleichen strukturen haben. ergo gab es ein problem, man war an den daten gebunden. jede abeiteilung hatte unterschiedliche daten strukturen und somit waren die gleichen daten mehrfach vorhanden, eben nur in anderen sturkturen.

und um dises problem zu lösen, hat man datenbanken entwickelt. diese datenbanken haben sich nun darum gekümmert, wie die daten verwaltet werden und programme haben nicht mehr direkt auf die daten zugegriffen. damit erreichte man eine datenunabhängigkeit, die für unternehmen sehr, sehr wichtig ist. ok, damit ist schon mal der sinn klar, warum es datenbanken gibt. aber sind diese nun schneller oder langsamer als der weg über dateien ? dazu nehmen wir mal dein beispiel, wo ich dich nicht verstanden habe.

Du hast mich nicht verstanden. Das ist doch gar nicht nötig. Bei
einer fixen Datensatzlänge weiss ich genau, wo ich schreiben oder
lesen muss. Da muss ich immer höchstens *einen* Datensatz lesen,
bei einer Suche etwas mehr (abhängig vom Sortier-Verfahren).

yo, und genau hier setze ich an und zwar ganz genau bei den worten "etwas mehr". wenn du weisst, wie ein b-Baum oder bitmap indize funktioniert, dann würde dir das "etwas mehr" viel konkreter werden. dazu habe ich versucht, dir das mal für eine million datensätzen zu überlegen. ohne indize ist dafür ein sogenannter fullscan notwendig, sprich eine million mal muss er einen datensatz anfassen und entscheiden, ob er in das gute töpfschen kommt oder nicht. und dabei ist dr algorythmus so ziemlich egal, den du dabei anwendest, den die daten liegen nicht sortiert vor. und nun überleg mal, wieviele datensätze eine datenbank anfassen muss, wenn ein indize darüber liegt. und dann wirst du auch sehen, dass datenbanken in aller regel schneller sein werden. und es gibt noch viel mehr eigenschaften, die datenbanken schneller machen, so zum beispiel das cachen von daten, etc. natürlich at auch das betriebsystm einen cache ode reine festplatte. aber dort werden auch andenre operationen ausgeführt, die mit den daten gar nichst zu tun haben. insofern fliegen dort bestimmte informationen der datenbank viel schneller wieder raus, wohingegen die datenbank teilweise gar nicht mehr auf die platte zugreifen muss.

muss auch nur höchstens *einen* Datensatz schreiben, uU sogar nur
einen *Teil* des Datensatzes. Was meinst du, wie eine Datenbank das
macht? Die macht das genau so, nur verallgemeinert.

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. und es gibt sogar noch weitere mechanism. in eine datei muss die änderunng sofort durchgeführt werden. eine datenbank braucht das nicht sofort auf die platte schreiben und trotzdem ist die änderung wirksam.

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. Da kann ich selber
entscheiden, wie ich suche. Ob binär, ob per Hash-Index, das bleibt
völlig mir überlassen.

nein, da irrst du dich. ein indize ist nicht immer schneller, zum beispiel wenn ich nur sehr wenige datensätze habe. ABER die entscheidung für einen indize und welchen ist unabhängig davon, ob ich meine eigene "umgebung" benuntze oder nicht. auch bei deiner eigenen umgebung wird in aller regel ein indize viel helfen. und um ihn nutzen zu können, muss ich ihn vorher erstellt haben. und genau das macht eine blosse dateisicherung nicht.

such mal aus 1 millionen datensätze einen bestimmten eintrag ohne
einen solchen indize zu besitzen. eine blosse dateispeicherung wird
das nämlich nicht tun.

Das brauche ich auch nicht.

wen du daten schnell finden willst, warum brauchst du es dann nicht ? sag mal eine begründung, warum du auf den geschwindikeitsvorteil verzichten willst, genau das war ja seine frage ?

und dann wirst du sehen, dass eine datenbank um ein vielfaches
schneller ist.

Nein. Bei einer binären Suche z. B. wird der Aufwand logarithmisch,
da sind maximal ln 1000000 / ln 2 = 20 Vergleiche notwendig.

ohhhh, ich glaube jetzt sehe ich deinen denkfehler. erstens sind eventuell die 20 vergleiche immer noch mehr als über eine datenbank. ABER die daten liegen in keiner sortierung vor, dort liegt dein denkfehler. du muss jeden datensatz anfassen. ohne sortierung geht das nicht und genau das macht ein indize, er bringt eine sortierung rein.

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

Dito bei Dateien.

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. und die daten der firma wurden enmal aufgenommen und damit ist es gut. natürlich kannst du jetzt auch solche verweise einbauen. aber wie bereits gesagt, dann machst du genau das, was eine datenbank macht, nämlich anfangen logisch einzuteilen, indize zu erstellen, etc.

Wirklich, der einzige Grund, warum man Datenbanken benutzen sollte
ist der, dass wenige Leute das auch noch wirklich so hinkriegen und
es eine Heidenarbeit ist.

ich glaube, du solltest dich ein wenig mehr mit datenbanken auseinander setzten und vor allem mit den hintergründen, warum sie enstanden sind. ansonsten würdest du das nicht sagen.

Ilja