バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

バグ報告 > フロント機能 > SESSIONデータが多すぎるとMySQLのTEXT型をはみ出す

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
coelacanth
投稿日時: 2011/6/1 17:02
対応状況: −−−
半人前
登録日: 2011/1/31
居住地:
投稿: 26
SESSIONデータが多すぎるとMySQLのTEXT型をはみ出す
 バグというわけではないかもしれませんが、
 EC-CUBE2.11で購入商品数を増やすなどでSESSIONのデータ量が増えるとMySQLのTEXT型の容量を超えてしまいデータが欠損する症状を確認しました。

 対応としてはSESSIONのデータを少なくする&TEXT型をLONGTEXT型にするなどが有効そうです。

 PostgresのTEXT型は無限サイズなんですねぇ。

 以上、報告まで。
coelacanth
投稿日時: 2011/6/1 19:11
対応状況: −−−
半人前
登録日: 2011/1/31
居住地:
投稿: 26
Re: SESSIONデータが多すぎるとMySQLのTEXT型をはみ出す
チケット作成
「MySQLでSESSIONをDB保存する際の型がTEXT型なのでデータ量によってはあふれる」
http://svn.ec-cube.net/open_trac/ticket/1341
nanasess
投稿日時: 2011/6/1 19:40
対応状況: −−−
登録日: 2006/9/9
居住地: 宝塚
投稿: 1908
Re: SESSIONデータが多すぎるとMySQLのTEXT型をはみ出す
レンタルサーバーなど, Web サーバーを冗長化しないような環境でしたら, セッションデータは DB に保存しなくても良いと思われますので,

data/class/helper/SC_Helper_Session.php のコンストラクタの処理を以下のようにコメントアウトしてあげれば対処できると思われます


     function SC_Helper_Session() {
         $this->objDb = new SC_Helper_DB_Ex();
         /*
         session_set_save_handler(array(&$this, 'sfSessOpen'),
                                  array(&$this, 'sfSessClose'),
                                  array(&$this, 'sfSessRead'),
                                  array(&$this, 'sfSessWrite'),
                                  array(&$this, 'sfSessDestroy'),
                                  array(&$this, 'sfSessGc'));
          */
     }



----------------
大河内健太郎(Kentaro Ohkouchi)
EC-CUBE公式エバンジェリスト
スキルニル株式会社

EC-CUBE1系2系長期サポートホスティングサービス CUBE Lab
https://cubelab.info/

red
投稿日時: 2011/6/1 19:47
対応状況: −−−
登録日: 2010/2/15
居住地: 東京都
投稿: 1333
Re: SESSIONデータが多すぎるとMySQLのTEXT型をはみ出す
sfSessReadを直接呼んでる部分が何箇所かあったと思うので、その対処だけじゃ動かなくなっちゃうような気が。。。


        // セッションIDの存在をチェックする。
        $objSession = new SC_Helper_Session_Ex();
        if ($objSession->sfSessRead($sessionId) === null) {
            GC_Utils_Ex::gfPrintLog("Non-existent session id : sid=$sessionId");
            return false;
        }
seasoft
投稿日時: 2011/6/1 20:09
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7332
Re: SESSIONデータが多すぎるとMySQLのTEXT型をはみ出す
大したオーバーヘッドもないようなので、この際全てのカラムを LONGTEXT にすれば、とか思うのですが、どうでしょう? > MySQL 詳しい方

まぁ、2.11 のセッション情報の冗長さは少し改めないといけないと思いますね。たしか、カート周りは、商品情報をクラスから受け取った値を丸ごと突っ込んでいます。そして、値を取得するときも、色んな所から、てんでんばらばらと使ってて、バグの温床のニオイがします。


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

shutta
投稿日時: 2011/8/15 16:14
対応状況: −−−
仙人
登録日: 2010/2/4
居住地: 関西
投稿: 835
Re: SESSIONデータが多すぎるとMySQLのTEXT型をはみ出す
横からすみません。

引用:

seasoftさんは書きました:
大したオーバーヘッドもないようなので、この際全てのカラムを LONGTEXT にすれば、とか思うのですが、どうでしょう? > MySQL 詳しい方


(詳しい人ではないですが、)オーバーヘッド面では問題ないかと思いますが、全てのカラムに対してよりは、明示的にTEXT型以上のサイズが必要なものだけ型変更した方が分かり易いかと思います。
(チケットのコメントにも記載しましたが、こちらにも改めて話題を振り直します。)

引用:

まぁ、2.11 のセッション情報の冗長さは少し改めないといけないと思いますね。たしか、カート周りは、商品情報をクラスから受け取った値を丸ごと突っ込んでいます。そして、値を取得するときも、色んな所から、てんでんばらばらと使ってて、バグの温床のニオイがします。


こちらは、

r21191
http://svn.ec-cube.net/open_trac/changeset/21191

にてコミットしてみました。
一応動作確認はしていますが、色々な部分に影響していそうなので、細かなところで問題が出ていないか少し不安です。

本来は、商品情報を取得する部分を書き換えて、必要な情報だけ取得するように書き直すべきかもしれませんが、下位互換性というか、カスマイズ等で、デフォルトで必要な項目以外の項目を参照している場合も影響が少ないように r21191 のような変更にしてみました。

実装的には、既存の商品情報をがさっと突っ込んでいる部分はそのままにしておいて、そこから必要でない項目をunsetしています。

今回追加した、adjustSessionProductsClass()を、class_extends/SC_CartSession_Ex.php側で書き換えれば、カスタマイズしている方も既存の動きが保てるようにしています。
また、何もしない関数に上書きすれば、今まで通りの挙動になります。


----------------

リゾート会員権(エクシブ等)の売買・仲介

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


ec-cube.co

統計情報

総メンバー数は48,243名です
総投稿数は92,885件です

投稿数ランキング

1
seasoft
7332
2
AMUAMU
2712
3
nanasess
1908
4
468
1818
5
yuh
1600
6
red
1333
7
umebius
1296
8
fukap
907
9
h_tanaka
881
10
tsuji
852
11
shutta
835
12 ramrun 789
13
tao_s
758
14 karin 656
15 sumida 641
16
homan
633
17 DELIGHT 571
18
patapata
502
19
flealog
483
20 tonton 436


ネットショップの壺

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

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