2017-10-16 6 views
0

どうすればよいですか?2つのデータベースインスタンス(いくつかのルールを含む)に接続する方法(PHP PDO)

ルールは、次のとおり

  • 2つのデータベース(マスタとスレーブ)存在することができます。
  • 1つのデータベース(マスター)のみ存在できます。
  • クエリがSELECTであり、スレーブDBが使用可能な場合、クエリはスレーブDB上で実行する必要があります。
  • クエリがSELECTまたはスレーブDBを使用できない場合、クエリはマスタDB上で実行する必要があります。

いくつかの注意:

  • 両方のデータベースが同じサーバーに
  • データベースが異なるポート
  • にデータベースインスタンス$dbされているが、他のクラスに注入された...しかし、どのインスタンスすべきですか?マスターかスレーブ?クエリがSELECTかどうかはまだ分かりません。

いくつかの疑問:

  • 私は右、2つのデータベースインスタンスが必要ですか?
  • PDOの準備方法を拡張する必要がありますか?私はそれが悪い習慣だと思っていますが、それは何よりも優れています。
+0

2つのデータベースに接続できますが、一度に1つにアクセスできますか?私は恐れて、その両方に同時にアクセスするあなたの探している場合は不可能です。 – shashi

+0

@shashi一度に1つのインスタンスに接続できます(2つのインスタンスが必要です)。 – SandroMarques

+0

はい、接続オブジェクトを2つ作成し、必要に応じて使用してください – shashi

答えて

0

あり、このための「箱から出して」機能ではありません、しかし、あなたは多くの問題なしでこれを構築することができるはず、

希望動作を提供しますPHPクラスを作成します。 異なるデータベースへの接続数に制限はありません。

だからあなたのクラスは、read関数を作成します(http://php.net/manual/en/pdo.construct.php

を参照し、書き込み機能2 DB接続を初期化する必要があります。すべてのアプリケーションI/O実行がこのクラスを投げたことを確認してください。

毎回再接続する必要がないことを確認するには、クラスのシングルトンを作成することをお勧めします。 (https://en.wikipedia.org/wiki/Singleton_pattern

あなたのクラスは、接続が、これはあなたの方法であなたを取得しますhttp://php.net/manual/en/language.exceptions.php

希望を見フィットネスエクササイズでない場合は、例外をキャッチしていることを確認してください

このような
<?php 

class DB { 

    protected static $instance = null; 
    protected $master; 
    protected $slave; 

    public static function getInstance() 
    { 
     if (!isset(static::$instance)) { 
      static::$instance = new static; 
     } 
     return static::$instance; 
    } 

    public __construct(){ 
     // init master and slave connection 
    } 

    public read($sql){ 
     // read slave 
     // if not exists read master 
    } 

    public write($sql){ 
     // write to master 
    } 

} 
?> 

になります参照

+0

申し訳ありません@Tim私はポイントを取得していません。 – SandroMarques

+0

主なポイント:説明している種類の機能が必要な場合は、それを構築する必要があります。1つのインスタンスに2つの接続を作成できます。 (例のように)DBクラスを使用したい場合は、DB :: getInstance() - > read( "Select * from example")のような何かを行うことができます – Tim

+1

もっと具体的な回答が必要な場合:shareあなたの状況のた​​めのいくつかのコード例。 – Tim

関連する問題