ホームページ > バックエンド開発 > PHPの問題 > PHPでデータベース接続プールを使用するにはどうすればよいですか?

PHPでデータベース接続プールを使用するにはどうすればよいですか?

慕斯
リリース: 2023-03-10 20:56:02
転載
2951 人が閲覧しました

#PHP プログラムの場合、最適化に終わりはありません。データベース接続プールは、ある程度の最適化の役割を果たします。これにより、ユーザー要求ごとにデータベースからリンク リソースを申請する必要がなくなります。代わりに、既存のデータベース接続プール内のリンクを通じて返されるため、時間と効率の点で大幅に改善されます。したがって、この記事は、PHP がデータベース接続プーリングをどのように使用するかを理解するのに役立ちます。

関連する推奨事項: PHP 配列の検索アルゴリズムとは何ですか?どうやって見つけますか?

xml

可用性の高い構造化言語である XML は、構成ファイルとして非常に簡潔かつ包括的です。構成ファイルの世界における最近のリーダーである YAML や JSON と比較すると、有効なデータの割合は比較的小さいかもしれませんが、この冗長性には価値があります。

基本的に、その機能は XML ノードを読めばわかります。これが、大規模なプロジェクトが構成ファイルとして XML を使用する理由です。

冗長性は許容できますが、曖昧さやメンテナンスの問題を引き起こすことはできません。

PHP では、XML ファイルを使用するのが快適ですが、Java プログラムと比較すると、そうではありません。ただし、Python の処理と比較すると、PHP プログラムはそれほどエレガントではありません。

設定ファイルの読み取り

設定ファイルの読み取りとは、実際にはファイルを読み取り、それをパッケージ化することを意味します。私がよく使う方法は以下の2つです。

簡単な方法

この簡単な方法を初めて使用したとき、私は本当に少し落ち込んでいました。

$content = file_get_contents("filename.xml");echo $content;
ログイン後にコピー

その結果、ブラウザでテスト用のphpファイルにアクセスすると、xmlの内容のみが表示され、ノード情報が一切表示されなくなりました。


その後、ヘルプドキュメントを確認したところ、この関数によって返される結果は間違いなく文字列であることがわかりました。次に、vardump もこれを証明しました。そのため、この方法を使えば XML タグの TAG 情報を自動的に除外できるだろうと考え、あまり深く考えませんでした。

最後の偶然のテストは、Web ページのソース コードを開くことで、この関数が XML のすべての情報を読み取ったが、ブラウザに表示されるときにブラウザによって自動的に解析されることがわかりました。したがって、関連するコンテンツ部分のみが表示されます。

従来の方法

従来の方法は、ファイルを段階的に読み取ることです。残りは上記の計画と一致しています。

// 读取配置文件内容
            $handle = fopen("filepath", "r");            $content = fread($handle, filesize("filepath"));
ログイン後にコピー

PHP が XML を解析する

上記 2 種類の読み込みファイルは、実際には PHP が XML を解析するために用意されています。 PHP が XML を解析する方法に関するブログは数多くあります。 simplexml、XMLReader、DOM など、さまざまな方法があります。ただし、より小さい XML 構成ファイルの場合は、simplexml で十分です。

設定ファイル

<?xml version="1.0" encoding="UTF-8" ?><mysql>
    <!-- 为防止出现意外,请按照此标准顺序书写.其实也无所谓了 -->
    <host>localhost</host>
    <user>root</user>
    <password>123456</password>
    <db>test</db>
    <port>3306</port></mysql>
ログイン後にコピー

分析

<?php
/**
 * 作为解析XML配置文件必备工具
 */
class XMLUtil {
    public static $dbconfigpath = "./db.config.xml";
    public static function getDBConfiguration() {
        $dbconfig = array ();
        try {
            // 读取配置文件内容
            $handle = fopen(self::$dbconfigpath, "r");
            $content = fread($handle, filesize(self::$dbconfigpath));
            // 获取xml文档根节点,进而获取相关的数据库信息
            $mysql = simplexml_load_string($content);

            // 将获取到的xml节点信息赋值给关联数组,方便接下来的方法调用
            $dbconfig[&#39;host&#39;] = $mysql->host;
            $dbconfig[&#39;user&#39;] = $mysql->user;
            $dbconfig[&#39;password&#39;] = $mysql->password;
            $dbconfig[&#39;db&#39;] = $mysql->db;
            $dbconfig[&#39;port&#39;] = $mysql->port;
            // 将配置信息以关联数组的形式返回
            return $dbconfig;
        } catch ( Exception $e ) {
            throw new RuntimeException ( "<mark>读取数据库配置文件信息出错!</mark><br />" );
        }
        return $dbconfig;
    }
ログイン後にコピー

データベース接続プール

PHPプログラムの場合、最適化に終わりはありません。データベース接続プールは、ある程度の最適化の役割を果たします。これにより、ユーザー要求ごとにデータベースからリンク リソースを申請する必要がなくなります。代わりに、既存のデータベース接続プール内のリンクを通じて返されるため、時間と効率の点で大幅に改善されます。

それでは、データベース接続プールの実装の簡単なシミュレーションを次に示します。中心となるのは「プール」を維持することです。

プールから取り出して、使って、プールに戻します。

<?php
/**x
 *  PHP中的数据库 工具类设计
 *  郭璞
 *  2016年12月23日
 *  
 **/
class DbHelper {
    private $dbconfig;
    private $dbpool;
    public $poolsize;
    public function __construct($poolsize = 20) {
        if (! file_exists ( "./utils.php" )) {
            throw new RuntimeException ( "<mark>utils.php文件丢失,无法进行配置文件的初始化操作!</mark><br />" );
        }else {
            require &#39;./utils.php&#39;;
        }
        // 初始化 配置文件信息
        $this->dbconfig = XMLUtil::getDBConfiguration ();

        // 准备好数据库连接池“伪队列”
        $this->poolsize = $poolsize;
        $this->dbpool = array ();
        for($index = 1; $index <= $this->poolsize; $index ++) {
            $conn = mysqli_connect ( $this->dbconfig [&#39;host&#39;], $this->dbconfig [&#39;user&#39;], $this->dbconfig [&#39;password&#39;], $this->dbconfig [&#39;db&#39;] ) or die ( "<mark>连接数据库失败!</mark><br />" );
            array_push ( $this->dbpool, $conn );
        }
    }

    /**
     * 从数据库连接池中获取一个数据库链接资源
     *
     * @throws ErrorException
     * @return mixed
     */
    public function getConn() {
        if (count ( $this->dbpool ) <= 0) {
            throw new ErrorException ( "<mark>数据库连接池中已无链接资源,请稍后重试!</mark>" );
        } else {
            return array_pop ( $this->dbpool );
        }
    }

    /**
     * 将用完的数据库链接资源放回到数据库连接池
     *
     * @param unknown $conn            
     * @throws ErrorException
     */
    public function release($conn) {
        if (count ( $this->dbpool ) >= $this->poolsize) {
            throw new ErrorException ( "<mark>数据库连接池已满</mark><br />" );
        } else {
            array_push ( $this->dbpool, $conn );
        }
    }
}
ログイン後にコピー

テスト

アプリケーションが多すぎる場合、リクエストは拒否されます

データベース接続用のアプリケーションの数が少ない場合20 よりも大きい場合、プログラムは取得したデータベース接続プールから直接接続します。

PHPでデータベース接続プールを使用するにはどうすればよいですか?

#要求されたデータベースリンクリソースがデータベース接続プールの上限を超える場合、データベースリンクリソースは提供されません。そして例外を要求します。

PHPでデータベース接続プールを使用するにはどうすればよいですか?

満杯の場合は挿入を拒否する

データベース接続プールが満杯の場合、カスタマイズされたデータベース リンク リソースに戻りたい場合は、そうではありません。サポートされており、エラー メッセージが報告されます。


PHPでデータベース接続プールを使用するにはどうすればよいですか?

概要

復習すると、この実験では主に、オブジェクト指向の観点から単純なデータベース接続プールを設計および実装しました。 PHP コードをある程度最適化する役割を果たします。

さらに、simplexml は、XML ファイルを解析し、一般的なファイル読み取り操作を実行するためにのみ使用されます。

関連する学習ビデオの共有: php ビデオ チュートリアル

以上がPHPでデータベース接続プールを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート