数百万円の業務用ハンディーターミナルシステムと僕の2万円スマホで動かす「貧社のハンディーターミナル」アプリを比べ完全に負けていることが2つ有ります。
逆に、この2点以外ならお高い専用機と遜色の無い働きを僕のアプリはしています。

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

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

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

今回は、このマスターインポートの改良にチャレンジしました:-x

AI2LiveComplete(=AppInventor2+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サーバのアクセスログはこんな感じ。
AppInventor2+SQLのbulk importを安定させたい

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

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

んんんん・・・、負荷が超高そうな仕組み!
これでは、マスターの一部レコードをインポートミスしてもしょうがないか・・・

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

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

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

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

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

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

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

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

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

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

追記:

がーん、Nexus7をAndroid6.0へアップグレードしたらエラー続出 😮
最新Android OSの処理速度向上で、マスターファイル公開WEBサーバへのアクセス速度が早くなり過ぎたのかな・・・・ 😥

そもそも9秒のタメが無い!?

WEBサーバのログを確認すると1ファイル500レコードのbulk importファイルファイルを4,5ファイルインポートできていない!

と言うか・・・、サーバにアクセスしたログ自体が無い!(なぜ?)
エラーログにも何も無い!

なぜだろう?
原因が分からないとAndroid 6.0スマートフォンをハンディーターミナルとして買えないな・・・ :-o困った

まぁ、値崩れした旧モデルを買えばいいことか 🙄

AppInventor2+SQLのbulk importを安定させたい

(111 views)

コメントを残す

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