DB作成に要する時間 2 考察 version 5

2019/05/13 15:17 by yamasyuh68
  :追加された部分   :削除された部分
(差分が大きい場合、文字単位では表示しません)
DB作成に要する時間 2 考察 # prog
## こんなに遅いとちょっと使えないよなあ
しかしfoobarはどうして速いんだろう?
やってることは基本的に同じだと思うんだけど
コードのチューンだけで速くなるのだろうか?
キーポイントはタグの取得だ
mutagenは遅すぎだよなあ・・
everythingも速いけどなあ、そもそも仕組みが違うんだろうか?

## mutagen
mp3がエラー含めると5868ファイル、タグ取得に48.639秒、1ファイルにつき0.00828秒だった
速いのか遅いのか???
ちなみにエラーはmutagenのエラーで、ほぼタグ無しによる
普通にファイルをopenしてバイナリで読み込んでタグを取得してcloseして
私も昔zipファイルを扱うときにヘッダを自分で取得してデータを取り出すって事をやったことあるので何となくわかるんだけど
時間は仕方ないのか?
mutagenは全てのタグを取りに行ってるから、その分で時間がかかるのだろうか?
特定のタグだけを獲りに行けるんだろうか?

自作した方が良いかな
しかしタグってエンコードフォーマットによって違うんだなあ
それぞれ用に書くのって面倒だ
mutagenのソース見たらわかるだろうか??
pythonで自作するくらいならmutagen使った方が速いかもなあ

## 設計
① 対象フォルダを渡して列挙・検索・タグ取得してDBに追加までするクラスを作成
このクラスには初回、更新、監視機能をつける
② メインは音楽再生アプリにして、起動したら別スレッドで①クラスを呼び出す、通常は更新させる、監視はメインでやるかクラスでやるか要検討、メインスレッドはリストに基づき音楽を再生する
③①のクラスについて、DB追加を二段階にして、最初は追加のみ、二段階目でmutagenを使う方式を検討
④第一段階~拡張子判別だけしてDBに音楽ファイルを追加していく
第二段階~DBで mtime がnullのものを取り出してmutagen実行し、mtimeとタグをupdateしていく
・新規、更新
①init
connect DB
ファイル列挙
フォルダ除外
拡張子でフィルタリング
DBに追加(mtime なし)
 エラー時はmtime比較、同じならパス
            違ったらUpdate(mtime削除)
②def mutagen
DBからmtimeがNULLのものを抽出
mtime取得
mutagen取得
データをupdate 
close DB

・監視
③def watch
connect DB
ファイルをDBに追加(mtime なし)
 エラー時はmtime比較、同じならパス
            違ったらUpdate(mtime削除)
→②を呼び出す


<状況表示> status bar --- def disp status
adding m_files to DB...
getting TAG ... **/****
      

こんなに遅いとちょっと使えないよなあ

しかしfoobarはどうして速いんだろう?
やってることは基本的に同じだと思うんだけど
コードのチューンだけで速くなるのだろうか?
キーポイントはタグの取得だ
mutagenは遅すぎだよなあ・・
everythingも速いけどなあ、そもそも仕組みが違うんだろうか?

mutagen

mp3がエラー含めると5868ファイル、タグ取得に48.639秒、1ファイルにつき0.00828秒だった
速いのか遅いのか???
ちなみにエラーはmutagenのエラーで、ほぼタグ無しによる
普通にファイルをopenしてバイナリで読み込んでタグを取得してcloseして
私も昔zipファイルを扱うときにヘッダを自分で取得してデータを取り出すって事をやったことあるので何となくわかるんだけど
時間は仕方ないのか?
mutagenは全てのタグを取りに行ってるから、その分で時間がかかるのだろうか?
特定のタグだけを獲りに行けるんだろうか?

自作した方が良いかな
しかしタグってエンコードフォーマットによって違うんだなあ
それぞれ用に書くのって面倒だ
mutagenのソース見たらわかるだろうか??
pythonで自作するくらいならmutagen使った方が速いかもなあ

設計

・新規、更新
①init
connect DB
ファイル列挙
フォルダ除外
拡張子でフィルタリング
DBに追加(mtime なし)
 エラー時はmtime比較、同じならパス
            違ったらUpdate(mtime削除)
②def mutagen
DBからmtimeがNULLのものを抽出
mtime取得
mutagen取得
データをupdate
close DB

・監視
③def watch
connect DB
ファイルをDBに追加(mtime なし)
 エラー時はmtime比較、同じならパス
            違ったらUpdate(mtime削除)
→②を呼び出す

<状況表示> status bar --- def disp status
adding m_files to DB...
getting TAG ... /**