搜尋
首頁後端開發PHP問題詳細介紹一下PHP的DBA擴展

本篇文章要為大家詳細介紹一下PHP的DBA擴充。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

詳細介紹一下PHP的DBA擴展

PHP的DBA擴展學習

今天我們講的DBA 並不是傳統的資料庫管理員那個DBA ,而是一個PHP 中的巴克利風格資料庫的擴展。巴克利風格資料庫其實就是我們常說的鍵值對形式的 K/V 資料庫。就像我們平常用得非常多的memcached 或者redis 那樣,只是一個鍵和一個值對應,不過memcached 它們主要是存儲在內存中,而DBA 擴展則是將數據存儲在文件中,就像一個簡單的鍵值對形式的SQLite 一樣。

DBA 擴充功能所使用的資料庫類型基本上都是開源的,部署發布都很簡單,就是一個 db 文件,所以說它和 SQLite 很相似。不過缺點就是,它會一次將這個資料庫檔案載入到記憶體中,我們不能讓這個資料庫太大,否則就會撐爆記憶體。 DBA 資料庫都是和程式在一起的,所以它並沒有網路相關的接口,我們一般也​​只會在程式碼本地使用這種資料庫。

在安裝的時候,我們需要在編譯時增加--enable-dba=shared 配置,然後還要增加一個--enable-XXXX 配置,XXXX 指的就是我們要使用的巴克利風格資料庫的類型,比較常見的有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() 來開啟一個資料庫文件,第一個參數是資料庫檔案的路徑,第二個參數是開啟方式,包括r 、 w 、 c 、 n ,r 表示只讀,w 表示讀寫,c 表示建立加讀寫,n 表示如果沒有就創建並可以讀寫。第三個參數就是指定的資料庫類型,我們的系統中只安裝了 gdbm 函式庫,所以我們使用的是 gdbm 作為參數。和 mysql 一樣,我們也可以使用 dba_popen() 來開啟一個資料檔案的持久連結。

dba_replace() 函數則是新增或取代一條數據,如果數據不存在就新增加一條,如果存在了就替換對應 key 的值。第一個參數就是 key ,第二個參數就是資料的值 value 。

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() 用於獲取下一個鍵,透過這兩個函數,我們就可以獲得整個資料庫中的所有鍵信息,繼而也就可以通過這些鍵來遍歷整個資料庫中的所有內容。

dba_delete() 就是根據鍵來刪除一條資料了。

優化、同步資料庫

即使是mysql ,在長時間使用後,我們也需要進行一些整理優化的工作,例如讓mysql 自動整理文件碎片,整理索引等,它使用的SQL 語句是:optimize 表名。同理,DBA 擴充也為我們提供了這樣一個函數。

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

另外,就像 mysql 的快取一樣,DBA 在操作資料的時候也會進行緩存,這時我們可以使用一個函數將快取中的資料強制刷入硬碟檔案中。

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

目前開啟的資料庫清單

我們可以透過一個函數來查看目前開啟的資料連線有哪些,因為DBA 是基於檔案的簡單資料庫,所以我們可以在一段程式碼中打開多個數據連接。

// 获取当前打开的数据库列表
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() 有一個布林類型的參數,透過程式碼我們可以看出這個參數的作用就是回傳資訊的詳細程度。

總結

今天介紹的是非常簡單的一套資料庫擴充元件,它的功能就是這些,在日常的生產環境中,實際的應用場景其實並不多。簡單的鍵值對我們可以用 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中文網其他相關文章!

陳述
本文轉載於:segmentfault。如有侵權,請聯絡admin@php.cn刪除

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境