バージョン選択

フォーラム

メニュー

オンライン状況

42 人のユーザが現在オンラインです。 (36 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 42
もっと...

サイト内検索

機能要望 > その他 > もっとパフォーマンスのよいEC-CUBE

その他

新規スレッドを追加する

| 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ゲスト
投稿日時: 2008/6/2 18:14
対応状況: −−−
もっとパフォーマンスのよいEC-CUBE
現在、以下の環境でテストを行っております。

・eccube-2.2.0-beta

・Windows2003Server
・Apache2.2
・PHP 5.2.4
・PostgreSQL8.3

ちなみに、マシンは
・IntelPentium 4
・メモリ1G
のものを使用しております。

テストデータとして、
・カテゴリ3,000件
・カテゴリに均等に割り付けた商品10,000件
・全商品に対して規格を5件

入れた後に動作確認をしてみたのですが、すこぶるパフォーマンスが悪いです。
管理画面の一部ではスクリプトのタイムアウトが発生します。

プログラムやデータベースが多少触れる程度の私でも、同様の環境でデータ数が2,000,000件ほどあるシステムを構築した事がありますが、キャッシュ等を利用せずにレスポンスまでの時間が1秒弱くらいでしたので、環境の問題では決してないような気がします...。

現在作成しようとしているショップではカテゴリ数5,000件、商品数100,000件までは動作保障できる、かつ、レンタルサーバで動作可能なショップにしたいと思っております。

それには及ばないにせよ、もう少しそれに近づけるような、高品質のEC-CUBEを構築していただきたいと思います。
機能が沢山あるのはとても嬉しいのですが、それ以前に Webサイトとしてパフォーマンスが大事だと思います。

現状のパフォーマンスでは正直、話になりませんので。


※多少、毒づいてしまって申し訳ございませんが EC-CUBE が更なる発展を遂げる事を心より楽しみに思っております。。。
ゲスト
投稿日時: 2008/6/2 21:34
対応状況: −−−
Re: もっとパフォーマンスのよいEC-CUBE
つ[analyze]
nanasess
投稿日時: 2008/6/2 23:31
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2303
Re: もっとパフォーマンスのよいEC-CUBE
引用:

ゲストさんは書きました:

プログラムやデータベースが多少触れる程度の私でも、同様の環境でデータ数が2,000,000件ほどあるシステムを構築した事がありますが、キャッシュ等を利用せずにレスポンスまでの時間が1秒弱くらいでしたので、環境の問題では決してないような気がします...。



全データが 2,000,000件 あっても, 検索条件と INDEX 次第で1秒未満のレスポンスを実現することは可能でしょう.

しかし, 現在の EC-CUBE では, テーブルを複雑に結合しています.
さらに. 2.x 系では複数カテゴリ対応なので, さらに酷な検索条件となっています.

引用:

テストデータとして、
・カテゴリ3,000件
・カテゴリに均等に割り付けた商品10,000件
・全商品に対して規格を5件


上記の条件で表示に使用される SQL を explain してみましたか?
Pentium4, メモリ1GB という環境でしたら, 普通に考えて酷だと思います.

しかし, product_id をキーにした, dtb_products のみの検索でしたら, たとえ数百万件登録しても, 一瞬で検索できるでしょう.

引用:

それには及ばないにせよ、もう少しそれに近づけるような、高品質のEC-CUBEを構築していただきたいと思います。
機能が沢山あるのはとても嬉しいのですが、それ以前に Webサイトとしてパフォーマンスが大事だと思います。

現状のパフォーマンスでは正直、話になりませんので。


他力本願ではなく, 開発コミッターとして, 一緒に開発しませんか?
僕自身も, 現在のスキルでは, ご提示の要件を満たせる自信はありません...
これからもっと勉強して, もっと高性能な EC-CUBE にしていきたいですし.
ゲスト
投稿日時: 2008/6/3 11:22
対応状況: −−−
Re: もっとパフォーマンスのよいEC-CUBE
返信ありがとうございます。
引用:

しかし, product_id をキーにした, dtb_products のみの検索でしたら, たとえ数百万件登録しても, 一瞬で検索できるでしょう.


私の乏しい知識で考えた対策では、EC-CUBEでコレを実現させる、というものがありますが、DBの負荷もデータ量もかなり...。
他に何かいい方法がないかと思いつつ書込みさせていただいた次第です。

引用:

他力本願ではなく, 開発コミッターとして, 一緒に開発しませんか?
僕自身も, 現在のスキルでは, ご提示の要件を満たせる自信はありません...
これからもっと勉強して, もっと高性能な EC-CUBE にしていきたいですし.


多忙の為、ついつい他力本願になってしまい申し訳ございません。

私は偉そうに言うだけ言っておいて、開発に関する知識は、コミュニティ参加者の皆様よりかなり乏しいです。
私も同様に勉強中ではありますが、お力添えするのはかなり難しいかと思われます。

また、何か進展がございましたら報告させていただきますのでよろしくお願いいたします。
tao
投稿日時: 2008/6/4 0:06
対応状況: −−−
一人前
登録日: 2007/12/28
居住地: 東京
投稿: 82
Re: もっとパフォーマンスのよいEC-CUBE
横から失礼します。

パフォーマンスについてですが、MySQLの場合、JOINのキーになるindexを増やすだけだとダメなのでしょうか?

また、現在のEC-CUBEはMySQLではviewを使わずにサブクエリを使用していますが、MySQL5系のviewはまだまだ使えないという事なのでしょうか?

もし試されている様であれば教えて頂けると幸いです。
seasoft
投稿日時: 2008/6/4 23:18
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7365
Re: もっとパフォーマンスのよいEC-CUBE
なかなか、そこまでの規模のデータで検証したことは
無いでしょうから、貴重なデータとなりそうですね。

個人的にそこまで大規模な利用には興味は無いですが・・・


とりあえず、パフォーマンスが悪くなっている原因
(DB問い合わせ? PHP処理? etc...)を特定できたら良さげですね。

EC-CUBE がトレースログを吐けるのか分かりませんが、
可能ならばそういった辺りから。

無理なら、適時
<?php echo time(); ?>
とか。


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

nanasess
投稿日時: 2008/6/5 9:31
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2303
Re: もっとパフォーマンスのよいEC-CUBE
引用:

パフォーマンスについてですが、MySQLの場合、JOINのキーになるindexを増やすだけだとダメなのでしょうか?


JOIN が複雑すぎて, あまり効果が無いと思います.

引用:

また、現在のEC-CUBEはMySQLではviewを使わずにサブクエリを使用していますが、MySQL5系のviewはまだまだ使えないという事なのでしょうか?


EC-CUBE の要件として, MySQL4.1.x での動作があげられていますので, MySQL で VIEW を採用するのは難しいと思われます.

また, 知識不足で恐縮なのですが, MySQL では VIEW にするとパフォーマンスは向上するものなのでしょうか.

# PostgreSQL や Oracle ではあまり変らないようです.
tao
投稿日時: 2008/6/5 10:29
対応状況: −−−
一人前
登録日: 2007/12/28
居住地: 東京
投稿: 82
Re: もっとパフォーマンスのよいEC-CUBE
ご回答ありがとうございます。

PostGresの新しいバージョンも出たので色々試してみます。
seasoft
投稿日時: 2008/6/8 10:39
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7365
Re: もっとパフォーマンスのよいEC-CUBE
引用:

引用:

パフォーマンスについてですが、MySQLの場合、JOINのキーになるindexを増やすだけだとダメなのでしょうか?


JOIN が複雑すぎて, あまり効果が無いと思います.


なんら検証をしたわけではありませんが、少なくとも pgsql のテーブル定義を見る限り、インデックスで改善しそうなテーブル構造が多々あります。

MySQL に、複雑な JOIN でインデックスが適切に使われない癖があったりすと話は別ですが。


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

nanasess
投稿日時: 2008/6/8 22:42
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2303
Re: もっとパフォーマンスのよいEC-CUBE
以前, いろいろ頑張ってみましたが, 現状のテーブル構成では諦めました...

例えば, 2.x の商品一覧では下記のような SQL が流れます.
(MySQL のものですが, PostgreSQL でも VIEW を使用しているだけで概ね同様です)


SELECT DISTINCT
                T1.product_id,
                product_code_min,
                product_code_max,
                price01_min,
                price01_max,
                price02_min,
                price02_max,
                stock_min,
                stock_max,
                stock_unlimited_min,
                stock_unlimited_max,
                del_flg,
                status,
                name,
                comment1,
                comment2,
                comment3,
                main_list_comment,
                main_image,
                main_list_image,
                product_flag,
                deliv_date_id,
                sale_limit,
                point_rate,
                sale_unlimited,
                create_date,
                deliv_fee,
                T4.product_rank,
                T4.category_rank
           FROM (SELECT T1.product_id,
                        product_code_min,
                        product_code_max,
                        price01_min,
                        price01_max,
                        price02_min,
                        price02_max,
                        stock_min,
                        stock_max,
                        stock_unlimited_min,
                        stock_unlimited_max,
                        del_flg,
                        status,
                        name,
                        comment1,
                        comment2,
                        comment3,
                        main_list_comment,
                        main_image,
                        main_list_image,
                        product_flag,
                        deliv_date_id,
                        sale_limit,
                        point_rate,
                        sale_unlimited,
                        create_date,
                        deliv_fee,
                        rank,
                       (SELECT rank AS category_rank
                          FROM dtb_category AS T4
                         WHERE T1.category_id = T4.category_id) AS category_rank,
                       (SELECT category_id AS sub_category_id
                          FROM dtb_category T4
                         WHERE T1.category_id = T4.category_id) as category_id
                  FROM (SELECT T0.product_id,
                               T0.del_flg,
                               T0.status,
                               T0.name,
                               T0.comment1,
                               T0.comment2,
                               T0.comment3,
                               T0.main_list_comment,
                               T0.main_image,
                               T0.main_list_image,
                               T0.product_flag,
                               T0.deliv_date_id,
                               T0.sale_limit,
                               T0.point_rate,
                               T0.sale_unlimited,
                               T0.create_date,
                               T0.deliv_fee,
                               T00.category_id,
                               T00.rank
                          FROM dtb_products AS T0
                     LEFT JOIN dtb_product_categories AS T00
                         USING (product_id)) AS T1
            RIGHT JOIN (SELECT product_id as product_id_sub,
                               MIN(product_code) AS product_code_min,
                               MAX(product_code) AS product_code_max,
                               MIN(price01) AS price01_min,
                               MAX(price01) AS price01_max,
                               MIN(price02) AS price02_min,
                               MAX(price02) AS price02_max,
                               MIN(stock) AS stock_min,
                               MAX(stock) AS stock_max,
                               MIN(stock_unlimited) AS stock_unlimited_min,
                               MAX(stock_unlimited) AS stock_unlimited_max
                          FROM dtb_products_class GROUP BY product_id) AS T2
                            ON T1.product_id = T2.product_id_sub
              )  AS T1
          JOIN (
          SELECT max(T3.rank) AS category_rank,
                 max(T2.rank) AS product_rank,
                 T2.product_id
            FROM dtb_product_categories T2
            JOIN dtb_category T3
           USING (category_id)
        GROUP BY product_id
               ) AS T4
         USING (product_id)
      ORDER BY T4.category_rank DESC, T4.product_rank DESC


改善可能な箇所がありましたら, ご教授下さい.
古いDBのバージョンも考慮しなくてはならないので, かなり大変です.
本体にフィードバックできそうでしたら, コミッターML などを通じて, 株式会社ロックオン様と交渉させて頂きます.
(1) 2 3 4 ... 6 »
| 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,288名です
総投稿数は109,688件です

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1567
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.