[s2container-php5:132] Re: S2Daoでマルチデータベースの実績はありますでしょうか?

KURODA Eishi [E-MAIL ADDRESS DELETED]
2008年 7月 9日 (水) 15:46:54 JST


masas様

> 黒田様が作ったのは、レプリケーションをやろうとした場合、既存のS2Daoを
> そのままではできないから?と認識しましたが、よろしかったでしょうか?
> 
> 作ったクラスというのは、Clientアプリ(Webアプリ)から複数のスレーブへ
> アクセスする際の負荷分散的なことを実現するためのクラスなのでしょうか?。

そうです。DNSラウンドロビンとかLVS使わなくても、
アプリケーション側で分散の設定が出来るならそれでいいや、と思いまして。
そんな訳で私の場合はちょっと面倒なことをやってたんですが、
単純に複数のデータベースを使いたいだけなら、
例えば下記のような感じで、
各データソースに対応したS2Container_PDODataSourceの設定ファイルと、
それらそれぞれに対応するS2DaoInterceptorの設定ファイルを用意して、
daoの設定で必要なinterceptorをaspectに書くだけで問題なかったはずです。

------------------------------
pdo1.dicon
<components namespace="pdo1">
    <component name="dataSource" class="S2Container_PDODataSource">
        <property name="dsn">"mysql:host=wwww; dbname=xxxx"</property>
        <property name="user">"yyyy"</property>
        <property name="password">"zzzz"</property>
        <property name="option">
            array(PDO::ATTR_ORACLE_NULLS => PDO::NULL_EMPTY_STRING, PDO::ATTR_AUTOCOMMIT => false);
        </property>
    </component>
    <component name="requiredTx" class="S2Dao_RequiredInterceptor" />
    ....
</components>

------------------------------
dao1.dicon
<components namespace="dao1">
    <include path="path_to/pdo1.dicon"/>
    <component class="S2Dao_BasicResultSetFactory" />
    <component class="S2Dao_BasicStatementFactory" />
    <component class="S2Dao_FieldAnnotationReaderFactory" />
    <component class="S2Dao_DaoMetaDataFactoryImpl" />

    <component name="interceptor" class="S2DaoInterceptor" />
</components>

------------------------------
pdo2.dicon
<components namespace="pdo2">
    <component name="dataSource" class="S2Container_PDODataSource">
        <property name="dsn">"mysql:host=aaaa; dbname=bbbb"</property>
    ....
</components>

------------------------------
dao2.dicon
<components namespace="dao2">
    <include path="path_to/pdo2.dicon"/>
    ....
    <component name="interceptor" class="S2DaoInterceptor" />
</components>

------------------------------
<components>
    <include path="path_to/dao1.dicon"/>
    <include path="path_to/dao2.dicon"/>

    <component name="fooDao" class="FooDao">
        <aspect>dao1.interceptor</aspect>
    </component>
    <component name="barDao" class="BooDao">
        <aspect>dao2.interceptor</aspect>
    </component>
</components>

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

黒田



S2Container-PHP5 メーリングリストの案内