Laden...

SQL vs. XML

Erstellt von der-Webdesigner vor 15 Jahren Letzter Beitrag vor 15 Jahren 2.824 Views
D
der-Webdesigner Themenstarter:in
54 Beiträge seit 2008
vor 15 Jahren
SQL vs. XML

Hi zusammen!

Ich habe mir ein Tool geschrieben, mit dem ich Dateien runterladen kann. Zu jeder Datei lege ich bisher eine XML-Datei an, in der dann alle Informationen dazu gespeichert werden. Jetzt bin ich aber auf die Idee gekommen, dass dies mit einer Datenbank doch wesentlich effizienter wäre, da ich so jede XML-Datei öffnen und auslesen muss. Sicherlich ist dies durch XPath schon recht gut geworden, jedoch sind Datenbanken ja meist noch mächtiger was die Anfragen angeht.

Was denkt ihr darüber? Würdet ihr eine lokale Datenbank verwenden und was nimmt man da? Access? Weil man dort dann vollständig ungebunden von einer Datenbank-Software ist? Denn meines Wissens reicht es ja da, die Access-Datei mit zu "installieren" und schon kann der Nutzer diese Datenbank verwenden. Macht ICQ es nicht sogar auch so?

Danke für eure Meinungen,
Manuel

1.200 Beiträge seit 2007
vor 15 Jahren

SQLite oder Firebird sind sehr beliebt. Eventuell ist auch eine XML Datenbank wie eXist etwas für dich. Guck dir das doch mal an.

Shift to the left, shift to the right!
Pop up, push down, byte, byte, byte!

YARRRRRR!

D
der-Webdesigner Themenstarter:in
54 Beiträge seit 2008
vor 15 Jahren

Sind diese Datenbanken denn portabel? Weil wenn ich diese vorher noch installieren müsste würde es natürlich für mich keinen Sinn machen. Ich persönlich kenne mich recht gut mit MySQL und PostgreSQL aus, daher wäre natürlich etwas Ähnliches total klasse. XML klappt jetzt wie gesagt auch, aber irgendwie habe ich das Gefühl, dass es nicht wirklich optimal ist, vor allem da ich nur schlecht beispielsweise an die Anzahl der Datensätze komme, was mit einem einfachen Query ja recht schnell möglich ist.

Danke schon mal für deine Antwort 🙂
Manuel

630 Beiträge seit 2007
vor 15 Jahren

Hallo,

datenbanken wie SQLite oder Firebird Embedded muss man nicht installieren. Du benötigst einfach nur eine DLL die im Anwendungsverzeichniss liegt. Die Datenbank selber wird in einer einzigen Datei Verwaltet.

Gruss
tscherno

To understand recursion you must first understand recursion

http://www.ilja-neumann.com
C# Gruppe bei last.fm

D
der-Webdesigner Themenstarter:in
54 Beiträge seit 2008
vor 15 Jahren

Wunderbar, genau danach habe ich gesucht, nur scheinbar nach den falschen Schlagwörtern.

Dankeschön euch beiden!

Gibts da eigentlich eine von den beiden, die ihr eher empfehlen würdet? Also SQLite oder Firebird Embedded? Von Firebird habe ich bisher nur Positives gehört, vor allem was die Stabilität angeht und SQLite glaube ich ist von der Syntax näher am Standard oder irre ich mich da?

630 Beiträge seit 2007
vor 15 Jahren

Hallo,

ich habe bis jetzt nur mit SQLite gearbeitet und bin vollstens zufrieden. Vorallem weil es schnell ist und mir die Architektur gefällt (mehr Infos auf der Homepage). Desweiteren unterstützt es sogar Transactions. Firebird wird auch oft verwendet, kann dazu aber nichts sagen. Es gibt auch noch den Microsoft SQL Server Compact den du dir ebenfalls ansehen kannst. Dort wird die Integration mit Visual Studio vermutlich am besten sein.

Nachtrag:
Was noch für SQLite spricht ist, das es bereits in vielen bekannteren Projekten eingesetzt wird. Unter anderem auch in den LKWs der amerikanischen Firma Oshkosh.

Gruss
tscherno

To understand recursion you must first understand recursion

http://www.ilja-neumann.com
C# Gruppe bei last.fm

D
der-Webdesigner Themenstarter:in
54 Beiträge seit 2008
vor 15 Jahren

Klingt auf jeden Fall echt gut. Schaus mir auch gerade an. Nur gibts da nicht ne andere Möglichkeit, als die Datenbank und die Tabellen über DOS-Befehle zu erstellen? Ich meine so schlimm ist es jetzt auch nicht, nur für riesen Datenbanken ist mir das ehrlich gesagt insgesamt zu langsam vom "Workflow" her. Oder gibts da vielleicht wiederum Tool für, mit denen sich das einfacher machen lässt?

Dankeschön,
Manuel

630 Beiträge seit 2007
vor 15 Jahren

Hallo,

unter .NET werden Datenbanken über die ADO.NET API angesprochen. Standardmässig ist nur ein ADO.NET Treiber für Micorosft SQL Server und Oracle dabei. Du musst dir also eine DLL für .NET besorgen die eine ADO.NET Schnittstelle zur Datenbank deiner Wahl herstellt. Für SQLite gibt es hier einen guten Treiber.

Tutorials für ADO.NET findest du im OpenBook oder in Google 😉.

Gruss
tscherno

To understand recursion you must first understand recursion

http://www.ilja-neumann.com
C# Gruppe bei last.fm

343 Beiträge seit 2007
vor 15 Jahren

Oder gibts da vielleicht wiederum Tool für, mit denen sich das einfacher machen lässt?

Wie tscherno schon gesagt hat musst/solltest du die Datenbanken über ADO.NET ansprechen.
Wenn du Tools zum Bearbeiten der Datenstruktur/Daten meinst/brauchst: Ja, die gibt es haufenweise, für SQLite zum Beispiel den SQLite Administrator: http://sqliteadmin.orbmu2k.de/

Ich hab mich längere Zeit mit SQLite, Firebird (embedded) und SQL Server CE befasst und bin zu folgenden Erkentnissen gekommen:

ALLE drei sind recht gut und zu empfehlen

1.) SQLite ist vor allem bei kleineren Datenmengen sehr schnell und auch von den Anforderungen (Speicherplatz, RAM) sehr effizient. Für größere Datenmengen würd ich an den Optionen etwas schrauben. Recht langsam ist SQLite allerdings bei Joins mit sehr großen Datenmengen, da sind die anderen zwei (Firebird, SQL Server CE) besser.

2.) Firebird (embedded) ist auch recht gut und bietet sehr, sehr viele Features, die sonst nur vollwertige Datenbankserver bieten (Transaktionen, Trigger, stored Prozedures, verschiedene SQL Dialekte ...)

3.) SQL Server CE -> ist auch recht schnell, vor allem mit großen Datenmengen - groß für embedded Verhältnisse versteht sich, denn bei 4 GB ist Schluss -> Limitierung von Microsoft; aber sonst auch empfehlenswert, vor allem sehr leicht zu benutzen und integriert sich prima ins Visual Studio

Hoffe das hilft bei deiner Entscheidung 😉

Liebe Grüße
Preli

[- www.saftware.net -](http://www.saftware.net/)
J
1.114 Beiträge seit 2007
vor 15 Jahren

Wo man vielleicht noch erwähnen sollte: Wenn die Datenmengen unerwarteter Weise doch wachsen sollen (und das tun sie aus eigener Erfahrung immer 🙂 ), ist ein Upgrade von Firebird Embedded zu Firebird rsp. von SQL CE zu einem vollwertigen SQL Server sehr leicht. Bei SQLLite ist man da etwas eingeschränkt.

Ich persönlich tendiere für kleine, einfache Sachen eher zu Firebird anstatt zuSQLLite, wegen der Transaktionsunterstützung. Auch im Singleuserumfeld können Transaktionen sehr praktisch sein.

3.825 Beiträge seit 2006
vor 15 Jahren

Ich würde den Microsoft SQl Server Compact (SQL CE) empfehlen. Der unterstützt auch Transaktionen.

Wenn man die Anwendung dann im Netzwerk laufen lassen will kann man auf SQL Server Express umbauen, das ist dann aber etwas Arbeit.

Siehe auch http://www.seven-c.de/files/datenbankenhowto.htm

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

343 Beiträge seit 2007
vor 15 Jahren

Ich persönlich tendiere für kleine, einfache Sachen eher zu Firebird anstatt zuSQLLite, wegen der Transaktionsunterstützung.

Auch SQLite unterstützt Transaktionen! Mit der einzigen Limitierung, dass es immer nur eine Transaktion zur gleichen Zeit geben kann.
Aber grundsätzlich werden Transaktionen und damit auch die Datenintegrität sogar sehr ernst genommen bei SQLite.

Liebe Grüße
Preli

[- www.saftware.net -](http://www.saftware.net/)
J
1.114 Beiträge seit 2007
vor 15 Jahren

Auch SQLite unterstützt Transaktionen

Ui, das wusst ich jetzt noch nicht. Man lernt nie aus... Danke für die Info

D
der-Webdesigner Themenstarter:in
54 Beiträge seit 2008
vor 15 Jahren

Also bisher habe ich mehr Doku zu SQLite gefunden, daher werde ich das jetzt einfach mal verwenden. Es klappt auch schon ganz gut alles, nur nicht auf anderen Rechnern. Da schmiert das Programm dann sofort ab.

_Con.ConnectionString = "Data Source=" + System.Windows.Forms.Application.StartupPath + "\\database.s3db;Version=3";

So rufe ich das auf und die Datenbank liegt dann in meinem Debug-Ordner. Auf meinem Rechner klappt das ganz gut und alles wird richtig erkannt. Nur wenn ich den Debug-Ordner auf einen anderen Rechner kopiere klappts nicht und das Programm schmiert sofort ab. Die DLL-Datei von SQLite habe ich jedenfalls auch mit kopiert. Diese liegt auch im Debug-Ordner, heißt daran dürfte es dann eigentlich nicht liegen.

Liebe Grüße,
Manuel

Edit: Also unter XP geht es auf jedem Rechner. Nur unter Vista gehts nicht: "Das Programm funktioniert nicht mehr ...". Aber ich verwende ebenfalls Vista, doch da gehts. Nur auf allen anderen Vista-Systemen geht es nicht.

J
57 Beiträge seit 2008
vor 15 Jahren

Ist das Vista 64-bit? Es gibt von System.Data.SQLite eine 32-bittige und eine 64-bittige. Entweder kompilierst du dein Programm nur auf 32-bit oder du musst die passende Assembly laden. Das steht auch noch auf meiner Liste. grml Kann mir da jemand einen schnellen Tipp geben?

D
der-Webdesigner Themenstarter:in
54 Beiträge seit 2008
vor 15 Jahren

Ja, das ist Vista 64 Bit. Aber ich verwende zum entwickeln auch Vista 64 Bit und da gehts. Habs auf 2 anderen Vista-Systemen getestet, beide aber 64 Bit und da gings nicht. Heißt ich brauche 2 DLLs? Werden diese dann automatisch nach OS gewählt oder was muss man da tun?

Dankeschön,
Manuel

J
57 Beiträge seit 2008
vor 15 Jahren

Na ja wenn alls 64 ist, sollte es ja kein Problem sein. Vielleicht hast du aus versehn die falsche dll kopiert. 🙂 Du musst "nur" die richtige Version kopieren, z.B. per Installationsprogramm (find ich richtig nervig).
Schau mal hier: http://sqlite.phxsoftware.com/forums/p/936/4022.aspx#4022

5.941 Beiträge seit 2005
vor 15 Jahren

Hallo zusammen

Ich habe mich auch schon mit SQLite beschäftigt.
Sieht ganz gut aus, vorallem für kleinere Angelegenheiten.

Damits auch angenehm wird, würde ich dazu noch einen OR / Mapper empfehlen.
SubSonic bspw., der unterstützt auch SQLite:

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

J
1.114 Beiträge seit 2007
vor 15 Jahren

Was für ein DB Designer Tool würdet ihr denn empfehlen für SQLLite. Für Firebird gibts ja z.B. den hervorragenden IBExpert. Gibt es was Vergleichbares für SQLLite?

5.941 Beiträge seit 2005
vor 15 Jahren

Salute Jelly

Das hier (SQL vs. XML) angesprochene sieht bisher am besten aus.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

F
10.010 Beiträge seit 2004
vor 15 Jahren

Es gibt nichts, was auch nur annähernd an IBExpert herankommt.

D
der-Webdesigner Themenstarter:in
54 Beiträge seit 2008
vor 15 Jahren

Hat man bei Firebird denn auch das Problem mit 32 und 64 Bit? Denn wenn nicht, würde das ja definitiv für Firebird sprechen, da ich so bereits 2 Versionen meines Tools zur Verfügung stellen müsste.

Lg,
Manuel

1.457 Beiträge seit 2004
vor 15 Jahren

Ich persönlich bevorzuge bei wirklich "kleinen" Applikationen VistaDB.NET. Bis heute hatte ich keine Probleme damit und Sie haben auch eine Express Variante (Bitte Lizenzbestimmungen beachten!).

C
401 Beiträge seit 2007
vor 15 Jahren

Hi,

XML klappt jetzt wie gesagt auch, aber irgendwie habe ich das Gefühl, dass es nicht wirklich optimal ist, vor allem da ich nur schlecht beispielsweise an die Anzahl der Datensätze komme, was mit einem einfachen Query ja recht schnell möglich ist.

wenn du alle Datensätze in einem XML-File speichern würdest sollte das doch kein Problem sein, oder? Natürlich möchte ich dich nicht davon abbringen eine Datenbank zu benutzen, aber wenn es nicht nötig ist kann man ruhig ein XML-File nehmen.

D
der-Webdesigner Themenstarter:in
54 Beiträge seit 2008
vor 15 Jahren

Das stimmt schon generell, aber zum einen ist XML meines Wissens nach langsamer, was jetzt natürlich lokal nicht so wichtig ist und zum anderen finde ich SQL rein von den Funktionen her wesentlich besser, denn ein JOIN über mehrere XML-Dateien dürfte ziemlich aufwändig sein. Die Grundlagen von XML funktionieren jedenfalls, aber ich möchte da noch wesentlich mehr entwickeln und da wäre SQL, wenns denn mal läuft, insgesamt einfacher. Daher wäre das schon genial, wenns irgendwie laufen würde, wobei ich halt den Aspekt "64 Bit" nicht bedacht habe.