Autor Beitrag
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Di 23.07.13 22:41 
Moin,

ich möchte Bestimmte Daten zu Musik-Titeln (Name, Genre, etc.) speichern.
Da viele Programme und externe Geräte (Handys, MP3-Player) aber die ID3-Tags aus den Eigenschaften von MP3-Dateien lesen, habe ich mir gedacht, die entsprechenden Spalten aus der Datenbank raus zu lassen.

Nun stellt sich mir aber die Frage, ist das sinnvoll?

Ist es schneller, diese Daten aus einer Datenbank abzufragen, oder fällt das nicht auf?
Sollte ich das lieber sowohl in der Datei und in der Datenbank ablegen und dann Änderungen auf den jeweils anderen Standort der Daten übertragen, oder ist das unnötige Redundanz?

Auf jeden Fall werde ich diese Daten möglichst Detailliert in die Eigenschaften schreiben, einfach weil, wie schon gesagt, viele Geräte und Programme diese Daten benutzen und dann auch das Übertragen der Titel auf einen anderen Rechner die Möglichkeit bietet, einen Großteil der Daten gleich mit zu geben, ohne eine extra Datei zu benutzen.

Grüße
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 23.07.13 22:57 
Wenn du nicht zusätzlich Daten hast die man in ID3 nicht unterbringen kann würde ich sagen ist eine Datenbank überflüssig. Damit gewisse Operationen schnell gehen wäre aber ein Index hilfreich. Dafür bräuchte man aber nicht unbedingt eine klassische Datenbank das können andere Systeme besser z.B. Lucene.
Palladin007 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Di 23.07.13 23:17 
Zusätzliche Daten habe ich schon und die kann ich leider auch nicht in den Eigenschaften selber unterbringen.

Außerdem ist das nur ein Teil der ganzen Datenbank, um die komme ich also nicht drum herum.

Daher frage ich, ob es lohnt, die Daten redundant in einer Datenbank abzulegen, was ja den Vorteil hat, dass ich dann Daten der Titel zu großen Mengen an Titeln auf einen Schlag aus der Datenbank lesen kann (z.B. Name, Cover und Wertung, das sollte auch bei tausenden Titeln schnell gehen), während ich bei den ID3-Tags jede Datei einzeln abfragen und ID3 abrufen müsste.

Das Abrufen der ID3-Daten habe ich bisher auch nur über Shell32 hin bekommen, indem ich alle greifbaren Eigenschaften abgerufen habe, das war dann doch ziemlich langsam. Ich hoffe, dass ich da noch eine deutlich schnellere Möglichkeit finde, zur Zeit probiere ich mit NAudio rum, vielleicht bietet das ja schnelle Möglichkeiten, ID3 zu verarbeiten
Palladin007 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Mi 24.07.13 03:17 
Zusatz für Interessierte:


Ich hab eben etwas scheinbar ziemlich gutes gefunden, um ID3-Tags zu lesen und zu schreiben: C# ID3 Library

Nutzbar so:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
            using (FileStream file = new FileStream(pfad, FileMode.Open, FileAccess.ReadWrite))
            {
                var tagModel = Id3Lib.TagManager.Deserialize(file);
                var handler = new Id3Lib.TagHandler(tagModel);
                handler.Title = "Musik-Titel";
                handler.Lyrics = "Song-Text";
                Id3Lib.TagManager.Serialize(tagModel, file);
            }


Die Tags sind dann auch brav in den Datei-Eigenschaften zu sehen, bis auf sowas wie Lyrics, die habe ich nicht gefunden. Dennoch sind sie in den Tags, denn ein weiteres Lesen (ohne fest legen der Lyrics natürlich) bringt dann den vorher definierten Wert hervor.

Wie das funktioniert habe ich auch völlig ohne Anleitung heraus gefunden - ist also ziemlich einfach.
Etwas Verständnis der englischen Sprache, logisches Denkvermögen und eine gesunde Neugierde zum Stöbern in der DLL, sowie die Bilder auf der verlinkten Seite reichen aus, um das raus zu finden.


Ich denke, das werde ich nutzen, aber die Frage, ob ich dennoch eine Datenbank für die Daten verwenden sollte, ist immer noch offen, denn ich rechne mit mehreren Tausend Dateien, die am Stück bearbeitet werden sollen und da weiß ich echt nicht, was besser oder effektiver ist.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 24.07.13 10:24 
Standardantwort - kommt drauf an. Wenn du an irgendeine Form von Filterung denkst wird die Datenbank schneller sein. Ob der Unterschied aber so groß ist das dieser Vorteil die Nachteile überwiegt (snchron halten der DB mit den ID3 Tags) ist aus dem Lameng kaum zu beantworten.

Ich würde wohl zur Datenabfrage irgendein Interface aufsetzen und die erste Implementierung nur auf die Dateien schauen lassen. Wenn sich das als zu langsam rausstellt würde ich die dann durch eine Implementierung in der Datenbank ersetzen. Je nach Komplexität ist es dann vielleicht sogar sinnvoll einfach beide Optionen drauf zu haben.
Palladin007 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Mi 24.07.13 13:32 
Gut, beim Filtern, oder Sortieren fällt das also doch auf.
Irgendwie auch logisch, SQL bietet ja von Haus aus entsprechende Funktionen, die ich sonst erst schreiben müsste und die Daten komplett lesen müsste, bevor ich sie sortieren und Filtern kann.
Dann ist wohl eine Datenbank besser für mich :D


Danke für die Hilfe ^^