詳細介紹一下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中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7
