Laboratory of Mobile Agricultural Chemicals Searcher
携帯農薬検索実験室

研究会

  ツリー表示 ┃スレッド表示 ┃一覧表示 ┃トピック表示 ┃番号順表示 ┃検索  
35 / 114 ツリー <前へ | 次へ>

〔730〕CSV 形式の農薬登録情報ダウンロードサービスを開始しました Hidemi Oya (07/11/17 22:46)

〔748〕ACFinder 071121test版 kabe (07/11/21 23:35)
〔750〕Re:ACFinder 071121test版 Hidemi Oya (07/11/22 0:44)
〔752〕Re:ACFinder 071121test版 kabe (07/11/22 20:35)
〔754〕Re:ACFinder 071121test版 Hidemi Oya (07/11/23 1:11)
〔756〕Re:ACFinder 071121test版 kabe (07/11/23 9:10)
〔759〕Re:ACFinder 071121test版 Hidemi Oya (07/11/23 11:22)
〔751〕ACFinder 071121test版バグ kabe (07/11/22 13:18)
〔753〕Re:ACFinder 071121test版バグ Hidemi Oya (07/11/22 23:23)
〔755〕Re:ACFinder 071121test版バグ Hidemi Oya (07/11/23 9:01)
〔757〕Re:ACFinder 071121test版バグ kabe (07/11/23 9:21)
〔758〕Re:ACFinder 071121test版バグ Hidemi Oya (07/11/23 10:47)
〔761〕Re:ACFinder 071121test版バグ kabe (07/11/23 21:08)
〔766〕Re:ACFinder 071121test版バグ Hidemi Oya (07/11/24 12:37)
〔760〕ACFinder 071123test版 kabe (07/11/23 21:00)
〔762〕Re:ACFinder 071123test版 Hidemi Oya (07/11/23 21:42)
〔763〕CSV データを若干仕様変更 Hidemi Oya (07/11/23 22:10)
〔765〕SQL タブの引用符をシングルクォートに Hidemi Oya (07/11/23 22:49)

〔748〕ACFinder 071121test版
 kabe WEB  (07/11/21 23:35)

引用なし
   kabe です。

071121test版です。
http://acfinder.kabe.info/acfinder071121.exe

CSVからテーブルへの読込みをシンプルにしました。
m^2 > u 変換のみ行います。
若干更新速度が速くなっています。

これを見ると、9万行の適用部でも、もっと劇的に早くなるのではないかと期待したのですが、思った程ではなかったです。
http://www.3rd-impact.net/Document/SQLite/Translation/Current/speed.html
1行毎に ExecSQL を実行しているせいかと思いましたが、そうでもないようです。

独自の接続先を選択できる機能を付けました。
設定>基本設定>ダウンロードタブを見てください。
接続先には update.txt toroku.zip の前までのURLを記入してください。

〔750〕Re:ACFinder 071121test版
 Hidemi Oya WEB  (07/11/22 0:44)

引用なし
   kabe さん、こん**は。Hidemi Oya です。

>CSVからテーブルへの読込みをシンプルにしました。
>m^2 > u 変換のみ行います。
>若干更新速度が速くなっています。
 今回は、csv->acis.db 変換が 7.8 秒ということで、071119test に比べると約 30 %短縮されました。xls->acis.db 変換に比べると、ほぼ半分の時間です。
 適用データを最初にテンポラリテーブルとして作ると、メモリ搭載量でかなり速度が変わると思われますが、xls->acis.db 変換対比で 30 %以上の短縮率が得られれば、そこそこ速くなった感じはすると思います。

>1行毎に ExecSQL を実行しているせいかと思いましたが、そうでもないようです。
 でも、前から BEGIN/COMMIT が機能してないようには感じてます。大量の INSERT 文を発行できるように、ストリームから SQL を流し込めるようにした方が良いのかなあ…。

>独自の接続先を選択できる機能を付けました。
 ありがとうございます。バッチリ、自宅サーバからデータをダウンロードできるようになりました。

>接続先には update.txt toroku.zip の前までのURLを記入してください。
 最初、ディレクトリ名の後ろのスラッシュを付けてなかったので、失敗しました(^_^;)。文字列末尾がスラッシュでない場合は、自動的にスラッシュを付加してくれると、より使いやすさが増すと思います。

〔751〕ACFinder 071121test版バグ
 kabe WEB  (07/11/22 13:18)

引用なし
   kabe です。

アルファベット、記号を半角のままで利用することに伴うバグがありました。

定型処理で、きゅうり(露地) など半角の()が含まれる作物名を regexp で検索できません。
きゅうり(露地)のように全角の()はOKです。
また作物タブでも、作物名選択ダイアログの検索タブからチェックボックスで選択した場合は検索できません。ツリーから選択する場合は、全角括弧になっているため検索できます。

原因は全角の()は \(? に展開されますが、半角の ( は ( のままのためです。
作物タブの作物名覧に直接記述した場合は、エンターした時点で半角括弧が全角括弧に強制的に変換されるため検索できます。

連休中に修正版を作成しますが、それまでご注意ください。

〔752〕Re:ACFinder 071121test版
 kabe WEB  (07/11/22 20:35)

引用なし
   >Hidemi Oyaさん

kabe です。

> でも、前から BEGIN/COMMIT が機能してないようには感じてます。
あ〜、どうもそのようですね。
BeginTransaction と Commit をコメントアウトしても、同じ早さです。
こんなことに今頃、気付くとは…
こうなると私にはさっぱりわかりません。

〔753〕Re:ACFinder 071121test版バグ
 Hidemi Oya WEB  (07/11/22 23:23)

引用なし
   kabe さん、こん**は。Hidemi Oya です。

>原因は全角の()は \(? に展開されますが、半角の ( は ( のままのためです。
 あ゛〜、すみません、私の CsvToRegexp 関数のせいですね。あの当時は全角しか考えてませんでしたから(^_^;)。
 AcfUtil.pas の CsvToRegexp 関数で、
 s := AnsiReplaceStr(s, '(', '\(?');
 s := AnsiReplaceStr(s, ')', '\)?');
の下に
 s := AnsiReplaceStr(s, '(', '\(?');
 s := AnsiReplaceStr(s, ')', '\)?');
を追加してください。

〔754〕Re:ACFinder 071121test版
 Hidemi Oya WEB  (07/11/23 1:11)

引用なし
   kabe さん、こん**は。Hidemi Oya です。

>BeginTransaction と Commit をコメントアウトしても、同じ早さです。
 ですよね。BEGIN 文でオートコミットは中止されるはずですが、それが機能していない(たとえば、sqlite3_finalize API の呼び出しでオートコミットに戻ってるとか)か、オートコミットによる速度差がないのかのどちらかでしょう。

 前者の場合は、複数の SQL 文をまとめて発行すれば、改善される可能性はあります。とりあえずは、100〜1000 行程度の INSERT 文をまとめて ExecSQL する方法を試してみてもらえませんか?
 INSERT 文をまとめるのは、TStringList.Add() して行くのが手っ取り早いですが、行数が増えるにつれてどんどん遅くなります。string に連結して行く方がより効果的だと思います。

〔755〕Re:ACFinder 071121test版バグ
 Hidemi Oya WEB  (07/11/23 9:01)

引用なし
   kabe さん、こん**は。Hidemi Oya です。

 さらに、CsvToRegexp 関数に下記も追加しておいた方が良さそうですね。

s := AnsiReplaceStr(s, '[', '\[?');
s := AnsiReplaceStr(s, ']', '\]?');
s := AnsiReplaceStr(s, '[', '\[?');
s := AnsiReplaceStr(s, ']', '\]?');

〔756〕Re:ACFinder 071121test版
 kabe WEB  (07/11/23 9:10)

引用なし
   >Hidemi Oyaさん

kabe です。

> とりあえずは、100〜1000 行程度の INSERT 文をまとめて ExecSQL する方法を試してみてもらえませんか?
これ、string に連結する方法を試してみたのですが、返って遅くなりました。
1000行連結すると、5倍くらい遅くなります。
文字列を連結するよりは1行づつ INSERT した方がずっと早いです。

sqlite.pas の方で何か対策ありますか。

ここの一番最後のあたり、それらしいことを書いてあるような気がしますが私には理解できません。
http://hp.vector.co.jp/authors/VA002803/sqlite/capi3dll.htm

〔757〕Re:ACFinder 071121test版バグ
 kabe WEB  (07/11/23 9:21)

引用なし
   >Hidemi Oyaさん

kabe です。

ありがとうございます。
ただ半角の方を先に置換しないとまずいですね。

あと作物名に露地が含まれていれば、施設は除外するようにしてましたが、露地と施設の両方が含まれていると、施設を検索できなかったのでこの部分も修正します。

〔758〕Re:ACFinder 071121test版バグ
 Hidemi Oya WEB  (07/11/23 10:47)

引用なし
   kabe さん、こん**は。Hidemi Oya です。

>ただ半角の方を先に置換しないとまずいですね。
 あ゛あ゛あ゛〜〜〜、おっしゃるとおりでございます。寝ぼけてました。

>あと作物名に露地が含まれていれば、施設は除外するようにしてましたが、露地と施設の両方が含まれていると、施設を検索できなかったのでこの部分も修正します。
 ん? え〜っと、具体的にどういうケースでしょうか?
 将来的には、Aの露地とBの施設のみに登録というような場合もあるかもしれませんが、今のところそういうのはなさそうですが…。

〔759〕Re:ACFinder 071121test版
 Hidemi Oya WEB  (07/11/23 11:22)

引用なし
   kabe さん、こん**は。Hidemi Oya です。

>これ、string に連結する方法を試してみたのですが、返って遅くなりました。
>1000行連結すると、5倍くらい遅くなります。
 あちゃ〜、そんなに遅くなりますか…。文字列サイズが大きくなるとメモリの再割り当てが発生するので、最初に SetLength で十分な量のメモリを確保しておかなければならないのかもしれません。それと、もし INSERT 文を
 INSERT INTO table (..) VALUES (..);
にしているなら、
 INSERT INTO table VALUES (..);
にすればいくらか速くなるかも…。
 が、SQL が長すぎて sqlite3_prepare に時間がかかっているのだとすれば、上記対策をしても結果は同じでしょうね。10〜50 行程度でまとめた方が良いかもしれません。

>ここの一番最後のあたり、それらしいことを書いてあるような気がしますが私には理解できません。
 SQLite.pas の ExecSQL は、sqlite3_exec ではなく、sqlite3_prepare, sqlite3_setp, sqlite3_finalize を使っています。ということで、INSERT 文の連結でなんとかなるかなと思ったわけです。
 INSERT 文の連結でダメなら、紹介していただいた記事でやっているように、仮パラメータの INSERT 文を用意しておいて、実パラメータを bind していく方法くらいしかありません。が、SQLite には SQL 文に PREPARE/BIND がないので、API レベルで汎用的に実装する方法が思い浮かびません。それと、フィールドごとに分解して bind する処理に時間がかかりますから、今回のように CSV データを INSERT する場合は、前述のように単純に全フィールドを INSERT していく方が速いはずです。

〔760〕ACFinder 071123test版
 kabe WEB  (07/11/23 21:00)

引用なし
   kabe です。

071123test版です。
http://acfinder.kabe.info/acfinder071123test.zip
EXEのみです。

半角の () [] を含む作物名を検索できない場合がある不具合を修正しました。

CSVデータの読込み方法を若干変更していますが、速度にほとんど変化はありません。
10行ひとまとめにして INSERT するのがほんの少しだけ早そうなのでそのようにしています。
文字列変換は _1 〜 _5 を 1.〜5.に戻す処理を付けました。

薬剤タブの検索仕様を若干変更しました。
薬剤の絞り込みを行う場合、これまで用途コンボボックス(殺菌剤、除草剤などの選択)を選択すると、作物名が指定されていてもリセットしてました。
作物名が指定されていれば、その作物の殺菌剤や除草剤のみを検索するようにしました。
薬剤候補と用途は、どちらかが選択されると、片方はリセットされます。

〔761〕Re:ACFinder 071121test版バグ
 kabe WEB  (07/11/23 21:08)

引用なし
   >Hidemi Oyaさん

kabe です。

> ん? え〜っと、具体的にどういうケースでしょうか?
> 将来的には、Aの露地とBの施設のみに登録というような場合もあるかもしれませんが、今のところそういうのはなさそうですが…。
まあ、あまりないとは思いますが、きゅうり(露地栽培)ときゅうり(施設栽培)だけを同時に検索して使用時期の確認をしたいなどとという場合を想定しています。
071123test版はそのように変更しました。

〔762〕Re:ACFinder 071123test版
 Hidemi Oya WEB  (07/11/23 21:42)

引用なし
   kabe さん、こん**は。Hidemi Oya です。

>CSVデータの読込み方法を若干変更していますが、速度にほとんど変化はありません。
 今回は、csv->acis.db 変換が 7.9 秒ということで、071121test 版と変わりませんでした。恐らく、これが私のマシンで目一杯の速度だということでしょう。2つ併せて 10 万レコード近いですから、ある程度時間がかかるのはやむを得ないと思います。

>文字列変換は _1 〜 _5 を 1.〜5.に戻す処理を付けました。
 あれま、適用の本文中にも1.2.などの丸付き数字を使っているものがあったんですね。CSV データに変換する段階で、丸付き数字を (1), (2) に変換するようにしますので、次のバージョンからこの部分は削除していただいて結構です。

>作物名が指定されていれば、その作物の殺菌剤や除草剤のみを検索するようにしました。
 現在は検索が速くなったので、前の仕様でも速度的な問題はありませんでしたが、やはりこの方が分かりやすくて便利ですね。

 ひとつ気づいたのですが、毒性データの英数字が全角のままなので、2,4-PA とか MCPA とかの毒性が表示されなくなってしまいました。元データは英数字が半角、カナが全角なので、文字種変換しない方が良いですね。併せて、私の作った別名テーブルも、英数字を半角に変換してご利用ください。

〔763〕CSV データを若干仕様変更
 Hidemi Oya WEB  (07/11/23 22:10)

引用なし
   Hidemi Oya です。

>CSV データに変換する段階で、丸付き数字を (1), (2) に変換するようにしますので、次のバージョンからこの部分は削除していただいて結構です。
 ここで書いたように、丸付き数字は、_1, _2 ではなく、(1), (2) に変換するようにしました。

 このほか、様々なプラットフォームでなるべく問題が少なく、そのまま使いやすい形にするということで、「メートル」は「メートル」、「u」は「平方メートル」に変換するように修正しています。

〔765〕SQL タブの引用符をシングルクォートに
 Hidemi Oya WEB  (07/11/23 22:49)

引用なし
   kabe さん、こん**は。Hidemi Oya です。

 今更ながらなんですが…。SQL タブの SQL 作成支援で、文字列を囲む引用符がダブルクォートになっていますが、シングルクォートに変えていただけないでしょうか? sqlite3.dll のバージョンによるのかもしれませんが、以前、ダブルクォートだと日本語のハンドリングがやや不安定になることを経験したことがあります。

〔766〕Re:ACFinder 071121test版バグ
 Hidemi Oya WEB  (07/11/24 12:37)

引用なし
   kabe さん、こん**は。Hidemi Oya です。

>まあ、あまりないとは思いますが、きゅうり(露地栽培)ときゅうり(施設栽培)だけを同時に検索して使用時期の確認をしたいなどとという場合を想定しています。
 同じ作物でってことでしたか。
 しかし、考えてみれば当たり前なんですが、作物タブで「きゅうり(施設栽培),きゅうり(露地栽培)」なんていう検索もできたんですねえ…。やってみて初めて、上位作物だけでなく複数の作物を指定できることに、今更のように気がつきました(^_^;)。
 あと、きゅうりの有機銅剤のように、同一作物でも露地と施設で使用時期が異なるために、単に「きゅうり」ではなく、露地と施設がそれぞれ別個に登録されている農薬があるのも知りませんでした。いやいや、奥が深い…。

  ツリー表示 ┃スレッド表示 ┃一覧表示 ┃トピック表示 ┃番号順表示 ┃検索  
35 / 114 ツリー <前へ | 次へ>
ページ:  ┃  記事番号:   
(SS)C-BOARD vv3.8 is Free.