Tripletail::MongoDB - MongoDB との接続

# 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->trapError の `main` 関数内で 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::MongoClient の dt_type は Time::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.

Tripletail::MongoDB - MongoDB との接続

# INDEX

- $TL->getMongoDB
- $TL->newMongoDB
- CODE
- DESCRIPTION
- INI
- Ini パラメータ
- METHODS
- MongoDB::NetworkError
- MongoDB::NotMasterError
- MongoDB::SelectionError
- MongoDB::TimeoutError
- MongoDB::WriteConcernError
- NAME
- SYNOPSIS
- connect
- disconnect
- do
- getClient
- host_uri
- max_retries
- max_retry_interval
- min_retry_interval

Tripletail::MongoDB - MongoDB との接続