sql >> データベース >  >> RDS >> Mysql

Perl接続プール

    DBIx ::Connectionの経験はありませんが、 DBIx ::Connector (基本的にDBIx ::Classが内部で使用するものですが、インライン化されています)そしてそれは素晴らしいです...

    これらの接続をMooseオブジェクトラッパーでプールします。Mooseオブジェクトラッパーは、接続パラメーターが同一である場合に既存のオブジェクトインスタンスを返します(これは、基になるDBオブジェクトでも同じように機能します):

    package MyApp::Factory::DatabaseConnection;
    use strict;
    use warnings;
    
    use Moose;
    
    # table of database name -> connection objects
    has connection_pool => (
        is => 'ro', isa => 'HashRef[DBIx::Connector]',
        traits  => ['Hash'],
        handles => {
            has_pooled_connection => 'exists',
            get_pooled_connection => 'get',
            save_pooled_connection => 'set',
        },
        default => sub { {} },
    );
    
    sub get_connection
    {
        my ($self, %options) = @_;
    
        # some application-specific parsing of %options here...
    
        my $obj;
        if ($options{reuse})
        {
            # extract the last-allocated connection for this database and pass it
            # back, if there is one.
            $obj = $self->get_pooled_connection($options{database});
        }
    
        if (not $obj or not $obj->connected)
        {
            # look up connection info based on requested database name
            my ($dsn, $username, $password) = $self->get_connection_info($options{database});
            $obj = DBIx::Connector->new($dsn, $username, $password);
    
            return unless $obj;
    
            # Save this connection for later reuse, possibly replacing an earlier
            # saved connection (this latest one has the highest chance of being in
            # the same pid as a subsequent request).
            $self->save_pooled_connection($options{database}, $obj) unless $options{nosave};
        }
    
        return $obj;
    }
    


    1. データベースのコピーを復元する

    2. codeigniterのアクティブレコードパターンを使用したUNIONクエリ

    3. selectステートメントの列の順序はクエリ速度に影響しますか?

    4. PostgreSQLはデータベースをどこに保存しますか?