Anfängerfrage: Datenbanken, was sind das genau, wozu sind sie zu nutzen, welche unterschiede gibt es?
-
Guten Tag,
In Sachen Datenbanken bin ich noch ein totaler Anfänger.Da mich das ganze aber interessiert, und das sonst so umfangreiche www etwas spärlich mit Informationen rausrückt, Stelle ich meine Fragen dazu einfach mal hier:
Was sind Datenbanken? Meines Wissens sind das Daten, die auf Servern liegen, auf die verschiedene andere Rechhner zugreifen können.
Wozu sind Datenbanken nutze?
Was bringen mir Datenbanken?
Sind das reine Informationsspeicher oder kann man damit viel machen?
Sind Datenbanken nur Sinnvoll, wenn man Daten auf einen Server legen will und diese dann speziell zu verwalten oder eignen sie Datenbanken auch zur lokalen benutzung?
Welche Unterschiede gibt es? Ich habe nun schon von OLEDB, DAO und ADO gehört.
was ist für mich am brauchbarsten?
Ich benutze Windows XP, programmiere mit vc++ 2008 Express kleinere bis mittelgroße Programme für Windows.mfg
Mr X
-
Also das wäre als erste Anlaufstelle doch schon nicht verkehrt gewesen?
http://de.wikipedia.org/wiki/Datenbank
-
Mr X schrieb:
Sind Datenbanken nur Sinnvoll, wenn man Daten auf einen Server legen will und diese dann speziell zu verwalten oder eignen sie Datenbanken auch zur lokalen benutzung?
Lokal sind Datenbanken nur beschränkt nützlich - du musst dann ja davon ausgehen, dass der Benutzer die entsprechende Datenbank überhaupt installiert hat. Grundsätzlich sind meiner Meinung nach Datenbanken für viele gleichzeitige Zugriffe wie geschaffen, eben auch übers Netz.
Datenbanken sind leicht nutzbar und irgendwie sehr verständlich, haben aber auch Nachteile. In einem 3D-Ego-Shooter den Spielstand in einer Datenbank zu speichern, würde z.B. auch nicht so viel Sinn machen, weil das in der Regel sehr viel langsamer ist, als den ganzen Kram in einer Datei zu speichern
-
Ich hatte Datenbanken ins Auge gfasst, da in meinem Programm durch den Benutzer Variablen geschaffen werden, die verschiedene, aber Regelmäßige Namen haben, und die in je nach Benutzerhandlung verschiedener Anzahl auftreten.
Ich weiß natürlich nicht, ob Datenbanken dazu hilfreich sind, vielleicht weiß jemand etwas nützlicheres?
mfg
Mr X
-
naja, ich sag mal so, solange es sich auf variablennamen beschränkt und irgendwie keine riesige struktur beinhaltet, finde ich den einsatz von datenbanken beschränkt sinnvoll, da dies totaler overkill ist. datenbanken sind ganz sinnvoll, um strukturiert daten auf einem server zu hinterlegen und abzurufen. und von "einfach mal ne datenbank benutzen" rate ich eh ab, da die bedienung zum teil zu umfangreich ist und man sich erstmal in die eigenheiten von datenbanken einlesen sollte und was tabellen sind, was diese machen, rechteverwaltung, relationen, etc bevor ich die gleich verwende...
wobei heutzutage kann des ja auch jeder mit access- "datenbanken" :p ^^
-
Um Daten aller Art persistent zu speichern verwende ich schon ganz gerne SQLite, aber dafür müssen schon ein paar Beweggründe mehr vorliegen, als "Variablen [...], die verschiedene, aber Regelmäßige Namen haben, und die in je nach Benutzerhandlung verschiedener Anzahl auftreten".
Dafür würde ich im Zweifelsfall Maps, Vektoren, oder was auch immer verwenden, die Angabe des OP ist hier wohl etwas zu ungenau.
-
Na ja, ich nutze Datenbanken mittlerweile auch für sehr kleine Datenmengen. Zumindest sobald ich die Möglichkeit zum Suchen, Sortieren oder Filtern brauche. Ich finde es dann wesentlich einfacher, zB eine Firebird Embedded DB anzulegen, als diese Funktionen selbst zu implemetieren.
Allerdings verwende ich auch den BCB, da gibt es viele fertige Komponenten für den DB-Zugriff. Ein paar Komponenten aufs Form legen, ein paar Einstellungen vornehmen und es kann losgehen.
-
datenbanken werden dann interessant, wenn man nicht bloß eine einfache liste von daten hat, sondern unterschiedliche daten mit diversen attributen, die miteinander in beziehung stehen, stichwort: relationale datenbank. solche datenbanken sind wahre "number cruncher" wenns darum geht, aus zig tausenden datensätzen eine handvoll nach bestimmten kriterien auszufiltern. wenn eine datenbank lokal vorhanden ist, spielt sich dieser vorteil nicht so gewaltig aus. aber stell dir mal vor, du wolltest bei amazon nach einem buch suchen und für die suche müssten dann erstmal 5 GB daten auf deinen rechner geschaufelt werden
-
Naja Datenbanken sind nicht nur SQL-Datenbanken, auch XML-Dateien kann man als Datenbank sehen, das Format ist auch so aufgebaut und man kann es wunderbar in einem DB-Grid anzeigen.
XML ist aber nur begrenzt einsetzbar, für große Datenbanken eignet es sich nicht so imho, da hat SQL den Vorteil. Aber wenns um "kleinere" Datenmengen geht, ist das v.a. auch deshalb praktisch, weil der User des Programms kein riesiges Paket mit Server etc installieren muss. Es reicht die Daten mit einem Parser zu lesen und die sind richtig fix und für so ziemlich jede Programmiersprache als OpenSource oder Freeware erhältlich.
Ich verwende XML meistens um Strings in versch. Sprachen zu speichern, da es Platformunabhängig ist. Aber auch für Games eignet sich das Format wunderbar, weil es schneller ist als eine Textdatei und die Datenmengen zu klein sind für ne "richtige" Datenbank.
rya.
-
Da frage ich mich aber, warum dann XML-Dateien und nicht gleich Binärformat? Das wäre um einiges fixer. Der einzige Vorteil von XML wäre in dem Fall, dass man die Daten schön mit einem Text-Editor einsehen und verändern kann. Der Vorteil fällt aber weg, wenn man einen Editor für die Binär-Datei anbietet.
-
Naja, ich finde es ist einfach ein schönes Format und man kann viel damit anstellen. Ich benutz selbst aber nur einen Bruchteil der Fähigkeiten von XML weil ich ehrlich gesagt noch keine Zeit hatte, mich mit Schemata auseinenanderzusetzen. *schäm*.
Aber für mich sinds ganz einfache und praktische Gründe:
- Fix zu parsen mit versch. Bibliotheken
- Die Bibliotheken sind überall verfügbar
- Keinerlei Aufwand für den User (SQL installieren etc)
- Leicht zu programmieren, da die Documente als verk. Listen representiert werden.
- Schnell und einfach zu editieren, gerade eben _weils_ _ohne_ spez. Editor geht.
- Offenes Format mit einem Standard
- Auch "normale" User können so eine Datei anpassen, weil sie sehr verständlich sind.Mal ein beispiel, wie ich xml einsetze:
<displays> <display name="low" width="800" height="600" depth="16" hz="85" fullscreen="false" vsync="false" fsaa="0" stencil="32" zbuffer="24" /> <display name="default" width="1024" height="768" depth="32" hz="85" fullscreen="false" vsync="false" fsaa="0" stencil="32" zbuffer="24" /> <display name="high" width="1024" height="768" depth="32" hz="85" fullscreen="true" vsync="false" fsaa="4" stencil="32" zbuffer="24" /> </displays> <textures> <texture name="bricks" target="GL_TEXTURE_2D" mipmap="true" value="data/brick.tga"/> <texture name="logo" target="GL_TEXTURE_2D" mipmap="true" value="data/logo.tga"/> <texture name="rocks" target="GL_TEXTURE_2D" mipmap="true" value="data/layingrock.tga"/> <texture name="ati" target="GL_TEXTURE_2D" mipmap="true" value="data/ATI.tga"/> <multitexture name="bricksbumped" target="GL_TEXTURE_2D" mipmap="true" texA="data/layingrock.tga" texB="data/layingrockBump.tga" default="1"/> </textures>
Einerseits oben als einfache Datei für Einstellungen und unten als "Datenbank" für meine Resourcen. Der Vorteil:
Ich kann beim Programmieren mal eben die Textur wechseln, ohne dass ich halt neu kompilieren muss. Gut, geht mit ner Textdatei auch, aber wenn die Dateien größer werden, wird das schon etwas langsamer. Der Speedvorteil ist halt nicht zu verachten.Oder halt als Sprachdatenbank:
<language name="German" <!-- Menu File --> <item name="MENU_FILE_NAME" value="Datei"/> <item name="MENU_FILE_OPEN" value="Öffnen..." /> <item name="MENU_FILE_SAVE" value="Speichern" /> <item name="MENU_FILE_SAVEAS" value="Speichern unter.." /> <item name="MENU_FILE_QUIT" value="Beenden" /> <item name="MENU_FILE_NEWSHADER" value="Neuer Shader..." /> <item name="MENU_FILE_PRINT" value="Drucken..." /> </language> // andere datei <language name="English"> <!-- Menu File --> <item name="MENU_FILE_NAME" value="File"/> <item name="MENU_FILE_QUIT" value="Exit" /> <item name="MENU_FILE_NEWSHADER" value="New Shader" /> </language>
Ich finde das Format hat für den Anwendungsprogrammierer durchaus seine Vorteil, v.a. aber für den OpenSource-Programmierer wie mich, der auf die Mitarbeit anderer auch angewiesen ist. So eine Sprachdatei kann jemand einfach auf z.bsp. Rumänisch übersetzen indem er sie editiert und ich brauch nicht so nen Editor basteln.
Aber es gibt auch noch richtig gute XML-Datenbanken, die man auch für große Projekte einsetzen kann:
http://exist.sourceforge.net/
Das alles sind glaube ich genug Gründe um XML einzusetzen.Zusatz:
Ich kann das immer schlecht erklären, aber das Dokument hier beschreibt das ganz gut:
http://www.dosco.eu/leist-planungundberatung-dtd-design.htm
Kurzform: Mit DTD kannst du halt dein Dokumentformat festlegen, also die Struktur beschreiben. Damit ist es dann jedem Programm möglich deine Daten zu parsen, ohne viel Aufwand. Alles was man braucht, ist das DTD. Ich find das gut, damit wird Datenaustausch zwischen Programmen und Libs einfacher.
rya.
-
Gute Übersicht! Und du hast auch in allen Punkten recht, geb ich ja zu
Kleines aber: Wenn du es so schön findest, dass es so schnell geht, wären Binärdateien eben noch eine ganze Ecke schneller. Aber das spielt bei so einem Einsatz (Beispiel Sprachdatenbank) ja keine Rolle, da es eh schnell genug geht! Hast mich sozusagen überzeugt
-
Scorcher24 schrieb:
Aber wenns um "kleinere" Datenmengen geht, ist das v.a. auch deshalb praktisch, weil der User des Programms kein riesiges Paket mit Server etc installieren muss.
Da verwendet man auch SQLite.
Ich verwende XML meistens um Strings in versch. Sprachen zu speichern
Eines der klassischen Beispiele für völlig unnötige Verwendung von XML. XML war ja ein großer Schritt bei div. Dateiformaten (Scribus, OpenOffice, ...), aber für sowas ist es einfach kompletter Overkill.
-
nman schrieb:
Da verwendet man auch SQLite.
Kann man. Oder halt Xml.
nman schrieb:
Eines der klassischen Beispiele für völlig unnötige Verwendung von XML.
Warum unnötig? Klar, ich kann auch andere Methoden verwenden wie GNU gettext etc um Strings zu übersetzen, aber die is einfach und schnell. Ich finde man sollte sowas jedem selbst überlassen. Jede Möglichkeit ist auch eine Lösung.
rya.
-
nman schrieb:
Ich verwende XML meistens um Strings in versch. Sprachen zu speichern
Eines der klassischen Beispiele für völlig unnötige Verwendung von XML. XML war ja ein großer Schritt bei div. Dateiformaten (Scribus, OpenOffice, ...), aber für sowas ist es einfach kompletter Overkill.
Gerade Sprachpakete werden doch relativ häufig in Textdateien dargeboten - was soll dann an XML Overkill sein? Auf die Schnelligkeit vom Einlesen und die Größe der Datei kommt es da nicht an, bleibt halt nur die Benutzer-Editierbarkeit (und der Aufwand, XML ins Programm zu integrieren :D).
-
Der overhaed von XML ist nicht zu verachten
wir benutzen hier mehrere xml basierende formate, um Daten aus Datenbanksystem zu exportieren. Wenn die dateien dann die 2 GB grenze ueberschreiten, isses nimmer lustig
Der verschnitt an Speicher ist nur die eine sache, der macht vielleicht 20/30 % aus, komprimieren kann man das ja immer noch.
Hauptproblem bei xml ist beim parsen, das man quasi immer das ganze dokument parsen muss. oder man muss in mehrere dateien aufsplitten. selbst mit SAX, wo man die events ja mindestens pruefen muss ob die relevant sind, entstehen relativ lange wartezeiten.fuer kleinere datenmengen ist XML aber durchaus geeignet. Aber wer setzt bei "kleinen Mengen" auch nen fettes DBMS ein ? ^^
Datenbanken werden viel zu oft mit RDBMS gleichgesetzt, was ned ganz korrekt ist. Ne datenbank ist eigentlich alles, was daten strukturiert in eine datei abspeichern kann. SQLite, DBase, Access etc sind definitiv datenbanken.
eine SQL datenbank ist wiederum etwas, wo man die daten halt mit nem entsprechenden Protokoll (SQL) lesen und schreiben kann.
nen RDBMS (relationales Datenbank Management System) erweitert die ganze sache dann um netztwerkfaehigkeit / funktionalitaet, Multiuserfaehigkeit, Berechtigungssystem, Transactionsmechanismen ....
Fazit:
Hat man "relativ" wenig daten, und / oder will soweiso immer alle Daten haben, ist XML sicher auch ne gute Wahl.hat man groessere dateien, will man indiziert suchen und nur die gefunden daten im speicher haben ... ist definitiv ne datenbank in erwaegung zu ziehen. SQLite find ich da auch toll.
hat man mehrere nutzer gleichzeitig auf den selben daten durch mehrere parallele clients, braucht man transaktionssicherheit und braucht berechtigungssystem -> mysql gibts auch kostenlos
Ciao ...