[Codeigniter-users] CIのDBクラスを使った場合の処理で質問

アーカイブの一覧に戻る

decoy youtu****@gmail*****
2009年 7月 22日 (水) 23:16:18 JST


decoyです。

私の場合は下記のような感じで更新系と参照系を分けています。

1.
system/application/config/autoload.php に通常であれば
$autoload['libraries'] = array('database'); と書くところを
下記のような感じで書く。

$autoload['libraries'] = array(
    'database' => array(
        'db' => 'Master',
        'slavedb' => 'Slave',
    ),
);

2.
system/application/config/database.php に繋ぎたいDBサーバの数だけ設定を書く。 


$db['Master'] = array(
・・・
);

$db['Slave'] = array(
・・・
);

3.
Loader.phpを継承したMY_Loader.phpを作成し、
Loader::databaseやLoader::_ci_autoloader辺りをオーバーライドし、
2で設定した数だけDBに接続するようにする。



こうすることで、モデル辺りで更新系の処理を行いたければ、
$this->db の後にSQLを書いたり、$this->db->insert(); したり、
参照系の処理を行いたければ、$this->slavedb の後に
SQLを書いたり、$this->slavedb->get(); したりすればOKです。

以上、ご参考まで。


// decoy

----- Original Message ----- 
From: <usagi****@ezweb*****>
To: <codei****@lists*****>
Sent: Tuesday, July 21, 2009 8:24 PM
Subject: Re: [Codeigniter-users] CIのDBクラスを使った場合の処理で質問


> kunitsujiです。
> やはり、DBクラスのラッパーを作って、
> アクティブレコードでインサートとか書いたら、そこで切り分けるしかないかな。。。 
> 
> 誰もやってないんですかね。
>
> ちなみにPNEは、リード、ライトの上で、処理関数を使ってますが、そこで吸収してますよ。少し凄いですね(笑)
> まあ、PEARのDBクラスをラッピングしてるんですが。
>
>>安藤です。
>>
>>2009/07/21 19:54 に <usagi****@ezweb*****> さんは書きました:
>>> kunitsujiです。
>>> 安藤さん、どうも。
>>> 例えば、最初1つのDBでアプリを動かして、あとで1台追加する場合、アプリ側は意識をしたくないんですよ。
>>>
>>> 設定に一つ足すだけで、フレームワーク側が吸収して欲しいのです。
>>> CIを考えた場合は確かに、CIの責務ではないように感じますね。
>>> アプリケーションのベースでやるべきかな。
>>> MyNETS2のベースでやるべきだとは思いますが、DBまわりって継承簡単に出来ない仕組みなんですよね(笑)
>>
>>単純に考えるなら、本でも書きましたが、
>>read系、write系ってモデルを切り分けることでしょうかね。
>>これだと、OpenPNEと一緒になってしまいますがw
>>
>>ちょっと考えましたが、writeでもreadはするので、共通モデルの
>>汎用性ががた落ちになりそうですね。
>>
>>//安藤
>>
>>
>>>
>>>>安藤です。
>>>>
>>>>2009/07/21 19:36 に kunitsuji<tsuji****@m-s*****> さんは書きました:
>>>>> kunitsujiです。
>>>>>
>>>>> CIのDBクラスを使って、接続先DBを変えることができます。
>>>>> たとえば、MySQLでマスターとスレーブを切り替えるような場合ですね。
>>>>>
>>>>> この時に思ったのですが、
>>>>> subのDBに記述がある場合、自動的に更新系の処理はdefault、SELECT系の処理は 
>>>>> 
>>>>> sub、見たいなことってできないもんでしょうかね。。。
>>>>>
>>>>> 実際ほとんどのアプリではdatabaseをつかうので、autoloadで読み込みしたりし 
>>>>> 
>>>>> てますので、都度modelで呼び出すのもどうかと思うし。
>>>>>
>>>>> このあたりうまく処理してるひといますか?
>>>>
>>>>この辺って、フレームワーク側でやるなら明示的にやる場合が多いと思います。
>>>>自動だと、誰もが望む構成になりえないと言うか。
>>>>
>>>>自動的ってなると、負荷分散側に任せたほうが良くないでしょうか?
>>>>#クラスタリング
>>>>
>>>>//安藤
>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Codeigniter-users mailing list
>>>>> Codei****@lists*****
>>>>> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
>>>>>
>>>>
>>>>
>>>>
>>>>--
>>>>----------------------------------------------------------------------------------------
>>>>株式会社 音生
>>>>安藤 建一
>>>>愛知県名古屋市中区金山5丁目11−6
>>>>名古屋ソフトウェアセンタービル1F
>>>>TEL : 052-884-0017
>>>>FAX : 052-884-0018
>>>>URL : http://neo-navi.net/
>>>>----------------------------------------------------------------------------------------
>>>>
>>>>_______________________________________________
>>>>Codeigniter-users mailing list
>>>>Codei****@lists*****
>>>>http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
>>>
>>> _______________________________________________
>>> Codeigniter-users mailing list
>>> Codei****@lists*****
>>> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
>>
>>_______________________________________________
>>Codeigniter-users mailing list
>>Codei****@lists*****
>>http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
>
> _______________________________________________
> Codeigniter-users mailing list
> Codei****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users 




Codeigniter-users メーリングリストの案内
アーカイブの一覧に戻る