Changeset 18571


Ignore:
Timestamp:
2010/02/18 11:06:04 (11 years ago)
Author:
Seasoft
Message:

マスタデータキャッシュに関する改訂

  • キャッシュ生成のロジックをPHP関数に依存させることで高速化。
  • 表示順を任意とすることで一部の処理を高速化。
  • パラメータ更新時の個別ロジックを極力単純にして共通化。
Location:
branches/comu-ver2/data/class
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/comu-ver2/data/class/db/SC_DB_MasterData.php

    r18507 r18571  
    5959     * 
    6060     * 以下の順序でマスタデータを取得する. 
    61      * 1. MASTER_DATA_DIR のマスタデータキャッシュを include() で読み込む 
    62      * 2. 1 で読み込んだ値をチェックし, 値が変数定義されていれば値を返す. 
    63      *    されていなければ, 次の処理を行う. 
    64      * 3. 値が未定義の場合は, DBからマスタデータを取得する. 
    65      * 4. 取得した後, マスタデータのキャッシュを生成し, 値を返す. 
     61     * 1. MASTER_DATA_DIR にマスタデータキャッシュが存在しない場合、 
     62     *    DBからマスタデータを取得して、マスタデータキャッシュを生成する。 
     63     * 2. マスタデータキャッシュを読み込み、変数に格納し返す。 
    6664     * 
    6765     * 返り値は, key => value 形式の配列である. 
     
    7674        $columns = $this->getDefaultColumnName($columns); 
    7775 
    78         // 可変変数を定義 
    79         $valiable = "_" . $name . "_master"; 
     76        $filepath = MASTER_DATA_DIR . $name . '.serial'; 
     77 
     78        if (!file_exists($filepath)) { 
     79            // キャッシュ生成 
     80            $this->createCache($name, $columns); 
     81        } 
     82 
    8083        // キャッシュを読み込み 
    81         @include(MASTER_DATA_DIR . $name . ".php"); 
    82  
    83         // キャッシュがあれば, キャッシュの値を返す. 
    84         if (!empty($$valiable)) { 
    85             return $$valiable; 
    86         } 
    87         // マスタデータを取得 
    88         $masterData = $this->getDbMasterData($name, $columns); 
    89         // キャッシュ生成 
    90         $this->createCache($name, $masterData); 
     84        $masterData = unserialize(file_get_contents($filepath)); 
     85 
    9186        return $masterData; 
    9287    } 
     
    253248     * @return bool キャッシュの生成に成功した場合 true 
    254249     */ 
    255     function createCache($name, $masterData, $isDefine = false, 
     250    function createCache($name, $columns = array(), $isDefine = false, 
    256251                         $commentColumn = array()) { 
    257252 
     253        // マスタデータを取得 
     254        $masterData = $this->getDbMasterData($name, $columns); 
     255 
    258256        // マスタデータを文字列にする 
    259         $data = "<?php\n"; 
    260257        // 定数を生成する場合 
    261258        if ($isDefine) { 
    262  
     259            $path = MASTER_DATA_DIR . $name . '.php'; 
     260 
     261            $data = "<?php\n"; 
    263262            // 定数コメントを生成する場合 
    264263            if (!empty($commentColumn)) { 
     
    268267                $data .= $this->getMasterDataAsDefine($masterData); 
    269268            } 
     269            $data .=  "?>\n"; 
    270270 
    271271        // 配列を生成する場合 
    272272        } else { 
    273             $data .= $this->getMasterDataAsString($name, $masterData); 
    274         } 
    275         $data .=  "?>\n"; 
     273            $path = MASTER_DATA_DIR . $name . '.serial'; 
     274            $data = serialize($masterData); 
     275        } 
    276276 
    277277        // ファイルを書き出しモードで開く 
    278         $path = MASTER_DATA_DIR . $name . ".php"; 
    279278        $handle = fopen($path, "w"); 
    280279        if (!$handle) { 
     
    305304 
    306305        $this->objQuery = new SC_Query(); 
    307         $this->objQuery->setorder($columns[2]); 
     306        if (isset($columns[2]) && strlen($columns[2]) >= 1) { 
     307            $this->objQuery->setorder($columns[2]); 
     308        } 
    308309        $results = $this->objQuery->select($columns[0] . ", " . $columns[1], $name); 
    309310 
     
    337338            return $this->columns; 
    338339        } 
    339     } 
    340  
    341     /** 
    342      * マスタデータの配列を配列定義の文字列として出力する. 
    343      * 
    344      * @access private 
    345      * @param string $name マスタデータ名 
    346      * @param array $masterData マスタデータの配列 
    347      * @return string 配列定義の文字列 
    348      */ 
    349     function getMasterDataAsString($name, $masterData) { 
    350         $data = "\$_" . $name . "_master = array(\n"; 
    351         $i = count($masterData); 
    352         foreach ($masterData as $key => $val) { 
    353             $data .= "'" . $key . "' => '" . $val . "'"; 
    354             if ($i > 1) { 
    355                 $data .= ",\n"; 
    356             } 
    357             $i--; 
    358         } 
    359         $data .= ");\n"; 
    360         return $data; 
    361340    } 
    362341 
  • branches/comu-ver2/data/class/pages/admin/design/LC_Page_Admin_Design_Template.php

    r18234 r18571  
    228228    } 
    229229 
    230     /** 
    231      * 使用するテンプレートをDBへ登録する 
    232      */ 
    233     function lfRegisterTemplate($template_code) { 
    234         $objQuery = new SC_Query(); 
    235         $sqlval['name'] = "\"" . $template_code . "\""; 
    236         $objQuery->update("mtb_constants", $sqlval, "id = ?", array('TEMPLATE_NAME')); 
    237         // キャッシュを生成 
    238         $masterData = new SC_DB_MasterData_Ex(); 
    239         // 更新したデータを取得 
    240         $mtb_constants = $masterData->getDBMasterData("mtb_constants"); 
    241         $masterData->clearCache("mtb_constants"); 
    242         $masterData->createCache("mtb_constants", $mtb_constants, true, 
    243                                  array("id", "remarks", "rank")); 
    244     } 
     230    /** 
     231     * 使用するテンプレートをDBへ登録する 
     232     */ 
     233    function lfRegisterTemplate($template_code) { 
     234        $masterData = new SC_DB_MasterData_Ex(); 
     235 
     236        $data = array('TEMPLATE_NAME' => var_export($template_code, TRUE)); 
     237 
     238        // DBのデータを更新 
     239        $masterData->updateMasterData('mtb_constants', array(), $data); 
     240 
     241        // キャッシュを生成 
     242        $masterData->createCache('mtb_constants', array(), true, array('id', 'remarks')); 
     243    } 
    245244 
    246245    /** 
  • branches/comu-ver2/data/class/pages/admin/system/LC_Page_Admin_System_Parameter.php

    r17571 r18571  
    135135 
    136136        // DBのデータを更新 
    137         $masterData->updateMasterData("mtb_constants", array(), $data); 
    138  
    139         // 更新したデータを取得 
    140         $mtb_constants = $masterData->getDBMasterData("mtb_constants"); 
     137        $masterData->updateMasterData('mtb_constants', array(), $data); 
    141138 
    142139        // キャッシュを生成 
    143         $masterData->clearCache("mtb_constants"); 
    144         $masterData->createCache("mtb_constants", $mtb_constants, true, 
    145                                  array("id", "remarks", "rank")); 
     140        $masterData->createCache('mtb_constants', array(), true, array('id', 'remarks')); 
    146141    } 
    147142 
Note: See TracChangeset for help on using the changeset viewer.