![]() |
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 |
Re: Intelligentes Datenbankdesign
Wie ist die Struktur der Datenbank? Wie sehen die Abfragen aus?
|
Re: Intelligentes Datenbankdesign
Achja, Entschuldigung.
Hier mal der Aufruf beim initialen Füllen aller Boxen:
Delphi-Quellcode:
Und hier die Grundstruktur (SQLite):
lResults.Query('SELECT "songid", "filename", "artist", "title", "a' +
'lbum", "tracknum", "year", "genre", "rating", "playtime", "filesize"' + ', "lyrics", "format", "vbr", "bitrate", "lastplayed", "timesplayed" ' + 'FROM "music"');
SQL-Code:
Gruß,
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 )
Max |
Re: Intelligentes Datenbankdesign
Ich würde die Anzahl der zurückgegebenen Datensätze enschränken, ud beim Scrollen Nachladen.
|
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 |
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. |
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 04:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz