Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Intelligentes Datenbankdesign (https://www.delphipraxis.net/81527-intelligentes-datenbankdesign.html)

Prototypjack 28. Nov 2006 18:37

Datenbank: SQLite • Version: 3.x • Zugriff über: LibSQL

Intelligentes Datenbankdesign
 
Hallo,
Ich arbeite (Auch wenn z.Z. die Zeit knapp ist) an meinem Player mit dem ich Versuche die Weltherrschaft an mich zu reißen. :mrgreen:

Das Ding funktioniert und arbeitet ganz gut, jedoch wird bei einer kompletten Abfrage der Daten die Query extrem langsam.
Ich muss jedoch irgendwie die Daten in mein VirtualTreeView bekommen, da ich sonst keinen vernünftigen Player schreiben könnte.

Was mich motiviert ist, dass ich weiß das es möglich ist, Konkurrenten wie Songbird, WinAMP und MusikCube zeigen es. Dort vergeht kein Augenblick bis die Daten da sind, wohingegen bei mir die Abfrage und der Aufbau bereits fast eine Sekunde (bei gleichem Datenvolumen) braucht.

Jetzt ist meine Frage:
Wie baue ich meine Datenbank am performantesten auf? Momentan habe ich ein ähnliches Grundkonstrukt wie es auch MusikCube benutzt.
Wo setze ich Indizes? Wann sollte ich die Daten wie laden? Alle auf einmal? Bei Bedarf(Wann ja: Wann genau? Meine Test's ließen sich mein Programm wie Java anfühlen :mrgreen:)?

Kann man beim Treiber/Wrapper noch Sachen herausholen? Ist LibSQL eine gute Wahl?

Ich hoffe ihr könnte damit was anfangen und mir helfen,
gruß,
Max

mkinzler 28. Nov 2006 19:05

Re: Intelligentes Datenbankdesign
 
Wie ist die Struktur der Datenbank? Wie sehen die Abfragen aus?

Prototypjack 28. Nov 2006 19:18

Re: Intelligentes Datenbankdesign
 
Achja, Entschuldigung.
Hier mal der Aufruf beim initialen Füllen aller Boxen:
Delphi-Quellcode:
      lResults.Query('SELECT "songid", "filename", "artist", "title", "a' +
        'lbum", "tracknum", "year", "genre", "rating", "playtime", "filesize"' +
        ', "lyrics", "format", "vbr", "bitrate", "lastplayed", "timesplayed" ' +
        'FROM "music"');
Und hier die Grundstruktur (SQLite):
SQL-Code:
CREATE TABLE "music" ("songid" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "format" varchar(10), "vbr" number(1), "filename" varchar(255), "artist" varchar(255), "title" varchar(255), "album" varchar(255), "tracknum" varchar(10), "year" number(4), "genre" varchar(255), "rating" number(1), "bitrate" integer, "lastplayed" timestamp, "notes" varchar(255), "timesplayed" integer, "timeadded" timestamp, "filesize" integer, "playtime" integer, "lyrics" memo )
Gruß,
Max

mkinzler 28. Nov 2006 19:20

Re: Intelligentes Datenbankdesign
 
Ich würde die Anzahl der zurückgegebenen Datensätze enschränken, ud beim Scrollen Nachladen.

Prototypjack 28. Nov 2006 19:32

Re: Intelligentes Datenbankdesign
 
Moin!
Danke erstmal für dein Antwort!
Die Idee hatte ich auch schon. Bei meinem test lud ich nur die essenzielle SongID und alles anderes dann dynamisch.

Leider wurde das Programm derart langsam, das ein solches Unterfangen untragbar wäre, zumindest unter diesen Gesichtspunkten.

Gibt's weitere Ideen?

Gruß,
Max

mkinzler 28. Nov 2006 19:35

Re: Intelligentes Datenbankdesign
 
Ich mente nicht die Anzahl der Felder, sondern die Anzahl der Datensätze.
Es gibt von VTV auch Beispiele für Datenbankanbindung, vielleicht sind diese ja hilfreich.

gsh 28. Nov 2006 20:07

Re: Intelligentes Datenbankdesign
 
vllt ladest du zuerst nur die titel bzw. den dateiname und dann füllst du die liste damit
und wenn du des angeezigt hast kannst du mit einem thread die einzelnen daten nach

außerdem bist du sicher das die query am längsten braucht? du könnstest überrall die zeit messen für verschiedne programmteile und alles in eine datei speichern und dann schaust du welcher teil am längesten braucht nun kannst du den programmteil beschleunigen


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz