31
Vývoj / Pomoc se strukturou databáze
« kdy: 12. 12. 2011, 17:03:20 »
Ahoj,
Vyvíjím v PySide/QML multimediální přehrávač. Zatím zvládá pouze hudbu, ale do budoucna počítám i s videem. To ale není podstatné.
Jeden z hlavních důvodů, proč jsem se rozhodl vytvořit vlastní přehrávač je to, že jsem potřeboval takový, který půjde ovládat prstem na dotykovém displeji a bude mít dobrou správu knihovny (dynamické playlisty, třídění podle žánru, umělce, alba atd.) Žádný takový přehrávač není (nebo jsem na něj zatím nenarazil), tak jsem si napsal svůj vlastní.
Jeden z problémů, který řeším, a jako naprostý laik v této oblasti neumím posoudit, je struktura databáze pro knihovnu. Momentálně mám pouze jednu databázi, ve které je na každém řádku asi 20 údajů ke každé písničce. V přehrávači potom s každou písničkou pracuji jako s objektem můžu se odkazovat na tyto vlastnosti. Takhle to funguje a je to i relativně rychlé.
Problém nastává, jako když si třeba teď vzpomenu, že u každé písničky chci mít nově přístupný nějaký nový údaj z tagů (teď je to BPM, příště to bude třeba počet přehrání). Jak tohle efektivně vyřešit? V mém případě to znamená přepsat kód na několika místech, smazat databázi a vytvořit novou s jiným počtem řádků. Samozřejmě po prvním spuštění na mě vypadne spousta chyb, protože aktuální databáze bude mít jiný počet řádků.
Jaké je správné a efektivní řešení mého problému? Fascinuje mě rychlost a funkčnost přehrávače foobar2000. Chtěl bych dosáhnout něčeho podobného. V podstatě celý kód, který pracuje s daty a databází je napsaný v Pythonu 2.x s SQLite pluginem, v tom by snad problém být neměl, doufám. Qt/QML je použité pouze pro uživatelské rozhraní.
Práce s databází (například vyfiltrování všech skladeb jednoho žánru) musí být dostatečně rychlá (do 0,1s). Navíc přehrávač používám na UMPC s Atomem, do budoucna ho možná portuju i na telefony s Androidem (až bude PySide pro Android) a další zařízení s podporou Pythonu a Qt. Každopádně mi na výkonu poměrně dost záleží a bojím se, že pokud udělám tabulku třeba se 100 sloupci, bude to mít negativní vliv na rychlost.
Předem díky za rady.
Vyvíjím v PySide/QML multimediální přehrávač. Zatím zvládá pouze hudbu, ale do budoucna počítám i s videem. To ale není podstatné.
Jeden z hlavních důvodů, proč jsem se rozhodl vytvořit vlastní přehrávač je to, že jsem potřeboval takový, který půjde ovládat prstem na dotykovém displeji a bude mít dobrou správu knihovny (dynamické playlisty, třídění podle žánru, umělce, alba atd.) Žádný takový přehrávač není (nebo jsem na něj zatím nenarazil), tak jsem si napsal svůj vlastní.
Jeden z problémů, který řeším, a jako naprostý laik v této oblasti neumím posoudit, je struktura databáze pro knihovnu. Momentálně mám pouze jednu databázi, ve které je na každém řádku asi 20 údajů ke každé písničce. V přehrávači potom s každou písničkou pracuji jako s objektem můžu se odkazovat na tyto vlastnosti. Takhle to funguje a je to i relativně rychlé.
Problém nastává, jako když si třeba teď vzpomenu, že u každé písničky chci mít nově přístupný nějaký nový údaj z tagů (teď je to BPM, příště to bude třeba počet přehrání). Jak tohle efektivně vyřešit? V mém případě to znamená přepsat kód na několika místech, smazat databázi a vytvořit novou s jiným počtem řádků. Samozřejmě po prvním spuštění na mě vypadne spousta chyb, protože aktuální databáze bude mít jiný počet řádků.
Jaké je správné a efektivní řešení mého problému? Fascinuje mě rychlost a funkčnost přehrávače foobar2000. Chtěl bych dosáhnout něčeho podobného. V podstatě celý kód, který pracuje s daty a databází je napsaný v Pythonu 2.x s SQLite pluginem, v tom by snad problém být neměl, doufám. Qt/QML je použité pouze pro uživatelské rozhraní.
Práce s databází (například vyfiltrování všech skladeb jednoho žánru) musí být dostatečně rychlá (do 0,1s). Navíc přehrávač používám na UMPC s Atomem, do budoucna ho možná portuju i na telefony s Androidem (až bude PySide pro Android) a další zařízení s podporou Pythonu a Qt. Každopádně mi na výkonu poměrně dost záleží a bojím se, že pokud udělám tabulku třeba se 100 sloupci, bude to mít negativní vliv na rychlost.
Předem díky za rady.