ホームページ >バックエンド開発 >PHPの問題 >PHP DBA 拡張機能の詳細な紹介

PHP DBA 拡張機能の詳細な紹介

醉折花枝作酒筹
醉折花枝作酒筹転載
2021-06-10 16:59:562589ブラウズ

この記事では、PHP の DBA 拡張機能について詳しく紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。

PHP DBA 拡張機能の詳細な紹介

PHP での拡張 DBA 学習

今日私たちが話している DBA は、従来のデータベース管理者 DBA ではなく、PHP データベース拡張における Buckley スタイルです。 Buckley スタイルのデータベースは、実際には、キーと値のペアの形式の K/V データベースとよく呼ばれるものです。私たちがよく使う memcached や redis と同じように、1 つの値に 1 つのキーだけが対応しますが、memcached は主にメモリに保存するのに対し、DBA 拡張機能は単純なキーのようにデータをファイルに保存します。値のペア形式では SQLite と同じです。

DBA 拡張機能で使用されるデータベース タイプは基本的にオープン ソースであり、デプロイとリリースは非常に簡単です。単なる db ファイルであるため、SQLite に非常に似ています。ただし、データベース ファイルを一度にメモリにロードするため、データベースを大きくしすぎるとメモリがパンクしてしまうという欠点があります。 DBA データベースは常にプログラムと一緒にあるため、ネットワーク関連のインターフェイスはなく、通常、この種のデータベースはコード内でローカルにのみ使用されます。

インストールするときは、コンパイル中に --enable-dba=shared 構成を追加し、次に --enable-XXXX 構成を追加する必要があります。XXXX は、使用する Buckley スタイル データベースを指します。タイプ、より一般的なものには、dbm、ndbm、gdbm、db2 などが含まれます。同様に、オペレーティング システムにもこれらの関連ソフトウェアをインストールする必要があります。たとえば、このシステムには gdbm がインストールされていますが、yum install を使用してインストールする必要があります。

簡単な例

最初にコードを見て、DBA データベースがどのように使用されるかを見てみましょう。

// 打开一个数据库文件
$id = dba_open("/tmp/test.db", "n", "gdbm");
//$id = dba_popen("/tmp/test1.db", "c", "gdbm");

// 添加或替换一个内容
dba_replace("key1", "This is an example!", $id);

// 如果内容存在
if(dba_exists("key1", $id)){
    // 读取内容
    echo dba_fetch("key1", $id), PHP_EOL;
    // This is an example!
}

dba_close($id);

まず、dba_open() を使用してデータベース ファイルを開きます。最初のパラメータはデータベース ファイルのパス、2 番目のパラメータは開く方法です。r、w、c、n が含まれます。r は読み取り専用を意味し、w は読み取り/書き込みを意味します。c は作成と読み取り/書き込みを意味します。n は if を意味します。 not 作成され、読み書き可能です。 3 番目のパラメータは指定されたデータベースの種類です。システムには gdbm ライブラリのみがインストールされているため、パラメータとして gdbm を使用します。 mysql と同様に、dba_popen() を使用してデータ ファイルへの永続リンクを開くこともできます。

dba_replace() 関数はデータを追加または置換します。データが存在しない場合は新しいデータを追加し、データが存在する場合は対応するキーの値を置換します。最初のパラメータはキー、2 番目のパラメータはデータの値です。

dba_exists()は指定されたキーが存在するかどうかを判定するもので、存在する場合はこのifのdba_fetch()でキーで指定されたデータを取得します。

dba_close() は他のデータ操作ハンドルと同様に、データベース接続ハンドルを閉じます。

データの追加、走査、および削除

上の例では、 dba_replace() を使用してデータを追加していますが、実際には、通常のデータ追加用の特別な関数があります。

// 添加数据
dba_insert("key2","This is key2!", $id);
dba_insert("key3","This is key3!", $id);
dba_insert("key4","This is key4!", $id);
dba_insert("key5","This is key5!", $id);
dba_insert("key6","This is key6!", $id);

// 获取第一个 key
$key = dba_firstkey($id);

$handle_later = [];
while ($key !== false) {
    if (true) {
        // 将 key 保存到数组中
        $handle_later[] = $key;
    }
    // 获取下一个 key
    $key = dba_nextkey($id);
}

// 遍历 key 数组,打印数据库中的全部内容
foreach ($handle_later as $val) {
    echo dba_fetch($val, $id), PHP_EOL;
    dba_delete($val, $id); // 删除key对应的内容
}
// This is key4!
// This is key2!
// This is key3!
// This is an example!
// This is key5!
// This is key6!

dba_insert() はデータを挿入します。既存のキー データは置き換えられません。既存のキー情報を挿入する場合は false を返します。

dba_firstkey() は最初のキーを取得するために使用され、dba_nextkey() は次のキーを取得するために使用されます。これら 2 つの関数を通じて、データベース全体のすべてのキー情報を取得できます。キーはデータベース全体のすべてを走査するために使用されます。

dba_delete() は、キーに基づいてデータを削除します。

最適化および同期データベース

たとえ mysql であっても、長期間使用した後は、mysql に自動的にファイルをデフラグしたり、インデックスを整理したり、 SQL ステートメントは次のとおりです。テーブル名を最適化します。同様に、DBA 拡張機能もそのような機能を提供します。

// 优化数据库
var_dump(dba_optimize($id)); // bool(true)

また、mysqlのキャッシュと同様に、DBAもデータ操作時にキャッシュを行いますが、その際、キャッシュ内のデータをハードディスクファイルに強制的にフラッシュする機能を利用することができます。 。

// 同步数据库
var_dump(dba_sync($id)); // bool(true)

現在開いているデータベース リスト

DBA は単純なファイルベースのデータベースであるため、関数を使用して現在開いているデータ接続を確認できます。 code 複数のデータ接続。

// 获取当前打开的数据库列表
var_dump(dba_list());
// array(1) {
//     [4]=>
//     string(12) "/tmp/test.db"
//   }

システムでサポートされているデータベース タイプ

最後に、データベースで現在サポートされているデータベース タイプを返すことができる、サポートされている関数を見てみましょう。

// 当前支持的数据库类型
var_dump(dba_handlers(true));
// array(5) {
//     ["gdbm"]=>
//     string(58) "GDBM version 1.18. 21/08/2018 (built May 11 2019 01:10:11)"
//     ["cdb"]=>
//     string(53) "0.75, $Id: 841505a20a8c9c8e35cac5b5dc3d5cf2fe917478 $"
//     ["cdb_make"]=>
//     string(53) "0.75, $Id: 95b1c2518144e0151afa6b2b8c7bf31bf1f037ed $"
//     ["inifile"]=>
//     string(52) "1.0, $Id: 42cb3bb7617b5744add2ab117b45b3a1e37e7175 $"
//     ["flatfile"]=>
//     string(52) "1.0, $Id: 410f3405266f41bafffc8993929b8830b761436b $"
//   }

var_dump(dba_handlers(false));
// array(5) {
//     [0]=>
//     string(4) "gdbm"
//     [1]=>
//     string(3) "cdb"
//     [2]=>
//     string(8) "cdb_make"
//     [3]=>
//     string(7) "inifile"
//     [4]=>
//     string(8) "flatfile"
//   }

dba_handlers() には Boolean パラメータがあり、コードから、このパラメータの機能が返される情報の詳細レベルであることがわかります。

まとめ

本日紹介したのは非常にシンプルなデータベース拡張コンポーネントのセットで、その機能はこれだけですが、日常の運用環境では実際の応用シーンはそれほど多くありません。 PHP ファイルのシリアル化を使用して単純なキーと値のペアを保存できますが、キャッシュには主に memcached などのツールが使用されるため、それについて学ぶことができます。

テスト コード:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202008/PHP%E7%9A%84DBA%E6%89%A9%E5%B1%95%E5%AD%A6%E4%B9%A0.md

推奨学習: php ビデオ チュートリアル

以上がPHP DBA 拡張機能の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。