Ticket #2512 (assigned 改善提案)

Opened 6 years ago

Last modified 5 years ago

郵便番号辞書登録の高速化

Reported by: nanasess Owned by: nanasess
Priority: Milestone: EC-CUBE2.13.x
Component: 管理画面 Version: 2.13.0
Keywords: Cc:
修正済み: no

Description (last modified by nanasess) (diff)

SC_Query::insert() を使用しているが、この関数は内部で SQL Statement を毎回生成するのでパフォーマンスが悪い。 レンタルサーバーなどでは、タイムアウトになってしまう場合も多い。

きちんと Prepared Statement を使用し、バッチ実行することで高速化を図る。

SC_Query::prepare() & SC_Query::execute() を適切に使用するようにしたパッチを添付します。 file() 関数でファイルオープンしている箇所を、もうすこしスマートにしたい。。

開発コミュ関連スレッド  http://xoops.ec-cube.net/modules/newbb/viewtopic.php?viewmode=flat&order=ASC&topic_id=14341&forum=12

ベンチマーク結果

Mac OS X 10.9, 2.8 GHz Intel Core 2 Duo, メモリ8GB, HDD, PHP 5.3.28, PostgreSQL 9.2.7 の環境

  • 改修なし - 119.28 秒
  • パッチ適用後 - 58.30秒
  • pg_prepare & pg_execute 使用 - 20.54秒

SC_Query::prepare() & SC_Query::execute() を適切に使用すれば、 2倍程度に高速化可能。ネイティブ関数を使えば、5倍以上の高速化が可能。


ベンチマーク環境: Windows 8.1 PHP 5.5.9 MySQL 5.6.14 Athron Phenom II X3 2.80GHz メモリ 12.0GB SSD

EC-CUBE:  https://svn.ec-cube.net/open/branches/version-2_13-dev/?r=23350

  • パッチ適用前: 477.43961691856秒
  • パッチ適用後: 241.02066898346秒

snitta 様


ベンチマーク環境: Mac OS X 10.9 PHP 5.3.28 MySQL MySQL 5.6.16 Intel Core i5 2.6 GHz メモリ 16.0GB SSD

attachment:pdo_insert_zip.patch Download を適用

  • パッチ適用前: 173.47324800491 秒
  • パッチ適用後: 17.414235830307 秒

その他

Attachments

zip_insert.patch Download (3.2 KB) - added by nanasess 6 years ago.
SC_Query::prepare(), SC_Query::execute() を適切に使用したパッチ。 pg_* 関数を使用した処理もコメントにて記載。
pdo_insert_zip.patch Download (3.9 KB) - added by nanasess 6 years ago.
PDO を使用したパッチ

Change History

comment:1 Changed 6 years ago by nanasess

  • Owner changed from somebody to nanasess
  • Status changed from new to assigned
  • Description modified (diff)

Changed 6 years ago by nanasess

SC_Query::prepare(), SC_Query::execute() を適切に使用したパッチ。 pg_* 関数を使用した処理もコメントにて記載。

comment:2 Changed 6 years ago by nanasess

  • Description modified (diff)

comment:3 Changed 6 years ago by nanasess

snitta 様 より

CSVの展開にexplode()を使うよう変更されていますが、 CSVの仕様遵守の方がパフォーマンスよりも大切だと思いますので 元のfgetcsv()を利用されてはいかがでしょうか?

fgetcsv()を利用も検討する。

comment:4 Changed 6 years ago by nanasess

  • Description modified (diff)

comment:5 Changed 6 years ago by nanasess

  • Description modified (diff)

Changed 6 years ago by nanasess

PDO を使用したパッチ

comment:6 Changed 6 years ago by nanasess

  • Description modified (diff)

PDO を使用すると大変良い結果が出たのでパッチを添付しておきます

comment:7 Changed 6 years ago by h_yoshimoto

  • Milestone changed from EC-CUBE2.13.2 to EC-CUBE2.13.3

comment:8 Changed 5 years ago by kim

  • Milestone changed from EC-CUBE2.13.3 to EC-CUBE2.13.4

nanasess様

郵便番号辞書はながらくレンタルサーバー泣かせですので こちら小規模改善として採用を検討しました。 2.13.3では見送りとさせていただきますが、次期バージョンでコミットいただけますと幸いです。

Note: See TracTickets for help on using tickets.