【ai】for eachの途中で一時停止させたいけど・・・・

数百万円の業務用ハンディーターミナルシステムと僕の2万円スマホで動かす「貧社のハンディーターミナル」アプリを比べ完全に負けていることが2つある。

それが、”バーコードスキャン”と”商品マスターインポート”。

スマホカメラを使った光学式バーコードスキャンは、バーコードスキャナーに敵いません。
カメラスキャンは、薄暗い倉庫ではなかなか読み取れず困っています 🙁

そしてもうひとつで最大の問題が、2万行近い商品マスターのインポート。
これが、超不安定!

今回は、このマスターインポートの改良にチャレンジ!

AI2LiveComplete(=App Inventor2+SQLite接続機能)での外部データインポート方法は、このサービスをの生みの親Amerkashi社長のブログに書いてます。

[SQLite Bulk Data Load–Hossein Amerkashi’s Blog]

ポイントは2つ:
1)bulk importファイルを作りWEBサーバからダウンロードさせないとインポートしてくれない。
2)1ファイルは、最大500レコード

仮にマスターが2万行あるとすると、作る必要のあるbulk importファイルは20000÷500=40ファイル

これを”for each 1 to 40″でループしながらイントラ内のWEBサーバ(=実際は僕のパソコン)へアクセスしファイルをダウンロード、そしてbulk import。
それを40回繰り返します。
その殆どの処理は、数秒の間に同時並行で行われます。

マスターインポートボタンを押した直後、WEBサーバのアクセスログはこんな感じ。
App Inventor2+SQLのbulk importを安定させたい

インポート実行と同時にWEBサーバからのダウンロードがスタート。

11秒〜14秒の3秒間に30個以上のファイルをダウンロードしようとしています。
それと並行しスマホフォン側では、1ファイル500レコードのbulk importも実行。

んんんん・・・、負荷が超高そうな仕組み!
これが唯一の方法なんですよ。
毎回、数ファイルx500行のインポートミスが起きます。

何かいい対策は・・・・:roll:
“for each 1 to 40″の間にポーズが作れないか?

で、考えたのがこれ!
App Inventor2+SQLのbulk importを安定させたい

最初のfor eachは9ファイルだけで終了。

そしてTimerが起動!
9秒後に、後半処理用のfor eachを実行。

なぜ、9ファイル目で9秒待ちの仕様したのかと言うと、色々テストし一番安定した組合せだったから。
深い意味はありません 😀

この改良後、WEBサーバのログがこんな感じに変わりました。
App Inventor2+SQLのbulk importを安定させたい

ダウンロードの途中で10秒(=プログラムでは9秒なんですが)の待ちが出来ました。
不思議なことに9ファイル目ではなく、一時停止したのは22ファイル目!

何もかもがプログラムの仕様変更と食い違ってますが、知識不足で原因が分かりません:-o

App Inventor2の「for each」+「Timer」の組み合わせは、かなりいい加減な感じで動いているように思えます 🙄
3種類の端末で試したところ、スマートフォンの性能の違いでWEBサーバへのアクセスが「for each」と関係無いタイミングで発生してます。

でも、まぁいいか!
改良後は、すこし安定した気がします 😀

コメントを残す

メールアドレスが公開されることはありません。