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

#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で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン