NAME

Tripletail::MongoDB - MongoDB との接続

SYNOPSIS

CODE

  $TL->startCgi(
      -MongoDB => 'MongoDB',
      -main    => \&main,
  );

  sub main {
      $TL->getMongoDB->do(sub {
          my $client = shift;
          my $coll   = $client->get_collection('test.collection.foo');
          my $doc    = $coll->find_one({a => 999});
          $TL->print($doc->{b});
      });
  }

INI

  [MongoDB]
  host_uri = mongodb://db1.example.com,db2.example.com,db3.example.com/?replicaSet=foo

DESCRIPTION

Tripletail::DB と同様の目的を持つモジュールだが、こちらは MongoDB (https://www.mongodb.com/) を対象とする。

METHODS

$TL->getMongoDB
  my $DB = $TL->getMongoDB;
  my $DB = $TL->getMongoDB($inigroup);

Tripletail::MongoDB オブジェクトを取得する。 引数には Ini で設定したグループ名を渡す。 引数省略時は MongoDB グループが使用される。

$TL->startCgi / $TL->trapErrormain 関数内で MongoDB オブジェクトを取得する場合に使用する。

$TL->newMongoDB
  my $DB = $TL->newMongoDB;
  my $DB = $TL->newMongoDB($inigroup);

新しく Tripletail::MongoDB オブジェクトを作成する。 引数には Ini で設定したグループ名を渡す。 引数省略時は MongoDB グループが使用される。

動的にコネクションを作成したい場合などに使用する。 この方法で Tripletail::MongoDB オブジェクトを取得した場合、"connect" / "disconnect" を呼び出し、接続の制御を行う必要がある。

connect
  $DB->connect;

MongoDB に接続する。

$TL->startCgi / $TL->trapError の関数内で MongoDB オブジェクトを取得する場合には自動的に接続が管理されるため、このメソッドを呼び出してはならない。

$TL->MongoDB で作成した Tripletail::MongoDB オブジェクトに関しては、このメソッドを呼び出し、MongoDB へ接続する必要がある。

MongoDB::MongoClientdt_typeTime::Moment に設定される。これは DateTime モジュールの動作があまりに遅い為である。

disconnect
  $DB->disconnect;

MongoDB から切断する。

$TL->startCgi / $TL->trapError の関数内で MongoDB オブジェクトを取得する場合には自動的に接続が管理されるため、このメソッドを呼び出してはならない。

$TL->MongoDB で作成した Tripletail::MongoDB オブジェクトに関しては、このメソッドを呼び出し、MongoDB への接続を切断する必要がある。

getClient
  my $client = $DB->getClient;

MongoDB::MongoClient オブジェクトを返す。このメソッドは後述の "do" を使わない場合にのみ必要となる。

do
  my $ret = $DB->do(sub {
      my $client = shift;
      # ...
  });

与えられた関数に MongoDB::MongoClient オブジェクトを渡して実行する。 実行中に特定の種類の例外が発生した場合には、少しの時間を置いてから既定の回数まで自動的に再試行する。

再試行回数の上限は "max_retries" で指定され、もしこの回数に達しても依然として例外が発生したならば、最後に発生した例外が再送される。 再試行時の遅延時間の最小と最大は "min_retry_interval""max_retry_interval" で指定されるが、実際の遅延時間は線型ではなく二次関数的に増加する。

現在のところ、再試行の対象となる例外は次の通りである。これ以外の例外が発生した際には再試行せずに即座にその例外を再送する:

MongoDB::NetworkError
MongoDB::NotMasterError
MongoDB::WriteConcernError
MongoDB::SelectionError
MongoDB::TimeoutError

Ini パラメータ

host_uri
  host_uri = mongodb://db1.example.com,db2.example.com,db3.example.com/?replicaSet=foo

接続先サーバーまたはレプリカセットの URI を設定する。詳細は "CONNECTION STRING URI" in MongoDB::MongoClient を参照のこと。

max_retries
  max_retries = 10

"do" の最大再試行回数を設定する。デフォルトは 10.

min_retry_interval
  min_retry_interval = 100

"do" の最小再試行遅延時間をミリ秒単位で設定する。デフォルトは 100.

max_retry_interval
  max_retry_interval = 1000

"do" の最大再試行遅延時間をミリ秒単位で設定する。デフォルトは 1000.