プロが教える店舗&オフィスのセキュリティ対策術

Linux、シェルスクリプトともに初心者です。

あるフォルダ(/home/user/image)の中にサブフォルダがありその中に画像ファイル(*.jpg)がたくさん入っています。この画像名をシェルスクリプトを使ってMySQLに書き込みたいと思っています。
いろいろネット検索して以下のようなシェルスクリプトを作成しました。これで一応動くのですが、それぞれのデータを書き込む時にその都度ユーザー名とパスワードをチェックするためかあまり速く動きません。
ループの前に最初にMySQLにログインして、その後ループを回したほうが速く動くような気がするのですがそのような方法はあるでしょうか?
また、画像数がとんでもなく多く更にはどんどん追加されるので、途中まで書き込んだ後に一旦終了して後日続きをおこなう場合に、画像名をuniqueとすると当然一意義務違反になるのですがそれを避ける方法はあるでしょうか?
本来は自分で検索する部分もあるかと思いますが、少々急いでおりますので質問させて頂きました。
どうぞよろしくお願いします。


#!/bin/sh
cd /home/user/image
for file in `find . -name '*.jpg'`; do
echo $file
echo "INSERT INTO image.imglist (imageName) VALUES ('$file');" | mysql -u root -ppassword
done

A 回答 (1件)

とりあえずテンポラリに書き込んでからまとめて流し込んだほうがよいのでは?



mysql -u root -ppassword < テンポラリファイル

データが多いのであればちょっと工夫が必要ですが
100件とか1000件とか適当な単位でデータをまとめて
バルクで流し込むことも検討した方がよいかも
    • good
    • 0
この回答へのお礼

yambejp さん投稿ありがとうございます。

バルクインサートの概念勉強になりました。
ただ、何しろシェルスクリプトに関して初心者なので、「100件とか1000件とか適当な単位でデータをまとめて」というのは私にはハードルが高く、まずはシェルスクリプトを勉強すべきという当然の結論に達しました。

画像ファイルは実は jpg ではなくて dcm(dicom) なのですが、ファイルの中の情報を解析してある処理をさせたいと思っていて、処理をさせるための台帳のようなものを作成する必要があると考え質問したのですが、よく考えたら既存のデータベースから必要事項を抜き出せばいいと気づきました。なんとも間抜けな話です。

PHPはある程度のプログラミングはできるのでいつかバルクインサートを使うかもしれません。そういう意味では質問した意味があったと思っています。ありがとうございました。

お礼日時:2016/05/28 17:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!