亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長資訊網(wǎng)
    最全最豐富的資訊網(wǎng)站

    詳細介紹一下PHP的DBA擴展

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

    詳細介紹一下PHP的DBA擴展

    PHP的DBA擴展學習

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

    DBA 擴展所使用的數(shù)據(jù)庫類型基本都是開源的,部署發(fā)布都很簡單,就是一個 db 文件,所以說它和 SQLite 很相似。不過缺點就是,它會一次性將這個數(shù)據(jù)庫文件加載到內(nèi)存中,我們不能讓這個數(shù)據(jù)庫太大,否則就會撐爆內(nèi)存。DBA 數(shù)據(jù)庫都是和程序在一起的,所以它并沒有網(wǎng)絡相關的接口,我們一般也只會在代碼本地使用這種數(shù)據(jù)庫。

    在安裝的時候,我們需要在編譯時增加 –enable-dba=shared 配置,然后還要增加一個 –enable-XXXX 配置,XXXX 指的就是我們要使用的巴克利風格數(shù)據(jù)庫的類型,比較常見的有 dbm 、 ndbm 、 gdbm 、 db2 等等。同樣的,操作系統(tǒng)也需要安裝相關的這些軟件,比如我們系統(tǒng)安裝的就是 gdbm ,需要使用 yum install 來進行安裝。

    一個簡單的例子

    首先還是通過代碼來看一下,我們的 DBA 數(shù)據(jù)庫是如何使用的.

    // 打開一個數(shù)據(jù)庫文件 $id = dba_open("/tmp/test.db", "n", "gdbm"); //$id = dba_popen("/tmp/test1.db", "c", "gdbm");  // 添加或替換一個內(nèi)容 dba_replace("key1", "This is an example!", $id);  // 如果內(nèi)容存在 if(dba_exists("key1", $id)){     // 讀取內(nèi)容     echo dba_fetch("key1", $id), PHP_EOL;     // This is an example! }  dba_close($id);

    首先是使用 dba_open() 來打開一個數(shù)據(jù)庫文件,第一個參數(shù)是數(shù)據(jù)庫文件的路徑,第二個參數(shù)是打開方式,包括 r 、 w 、 c 、 n ,r 表示只讀,w 表示讀寫,c 表示創(chuàng)建加讀寫,n 表示如果沒有就創(chuàng)建并可以讀寫。第三個參數(shù)就是指定的數(shù)據(jù)庫類型,我們的系統(tǒng)中只安裝了 gdbm 庫,所以我們使用的就是 gdbm 作為參數(shù)。和 mysql 一樣,我們也可以使用 dba_popen() 來打開一個數(shù)據(jù)文件的持久鏈接。

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

    dba_exists() 就是判斷指定的鍵是否存在,如果存在的話,我們在這個 if 里面就通過 dba_fetch() 獲取鍵指定的數(shù)據(jù)。

    dba_close() 就和其它數(shù)據(jù)操作句柄一樣了,關閉數(shù)據(jù)庫的連接句柄的。

    添加、遍歷、刪除數(shù)據(jù)

    在上面的例子中,我們使用的是 dba_replace() 來添加數(shù)據(jù),其實正規(guī)的數(shù)據(jù)添加是有專門的函數(shù)的。

    // 添加數(shù)據(jù) 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 保存到數(shù)組中         $handle_later[] = $key;     }     // 獲取下一個 key     $key = dba_nextkey($id); }  // 遍歷 key 數(shù)組,打印數(shù)據(jù)庫中的全部內(nèi)容 foreach ($handle_later as $val) {     echo dba_fetch($val, $id), PHP_EOL;     dba_delete($val, $id); // 刪除key對應的內(nèi)容 } // This is key4! // This is key2! // This is key3! // This is an example! // This is key5! // This is key6!

    dba_insert() 就是插入數(shù)據(jù),它不會去替換已經(jīng)存在的鍵數(shù)據(jù),如果是插入已經(jīng)存在的鍵信息,就會返回 false 。

    dba_firstkey() 用于獲取第一個鍵,dba_nextkey() 用于獲取下一個鍵,通過這兩個函數(shù),我們就可以獲得整個數(shù)據(jù)庫中的所有鍵信息,繼而也就可以通過這些鍵來遍歷整個數(shù)據(jù)庫中的所有內(nèi)容。

    dba_delete() 就是根據(jù)鍵來刪除一條數(shù)據(jù)了。

    優(yōu)化、同步數(shù)據(jù)庫

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

    // 優(yōu)化數(shù)據(jù)庫 var_dump(dba_optimize($id)); // bool(true)

    另外,就像 mysql 的緩存一樣,DBA 在操作數(shù)據(jù)的時候也會進行緩存,這時我們可以使用一個函數(shù)將緩存中的數(shù)據(jù)強制刷入硬盤文件中。

    // 同步數(shù)據(jù)庫 var_dump(dba_sync($id)); // bool(true)

    當前打開的數(shù)據(jù)庫列表

    我們可以通過一個函數(shù)來查看當前打開的數(shù)據(jù)連接有哪些,因為 DBA 是基于文件的簡單數(shù)據(jù)庫,所以我們可以在一段代碼中打開多個數(shù)據(jù)連接。

    // 獲取當前打開的數(shù)據(jù)庫列表 var_dump(dba_list()); // array(1) { //     [4]=> //     string(12) "/tmp/test.db" //   }

    系統(tǒng)所支持的數(shù)據(jù)庫類型

    最后,我們再來看一個支持型的函數(shù),它可以返回當前我們數(shù)據(jù)庫所支持的數(shù)據(jù)庫類型有哪些。

    // 當前支持的數(shù)據(jù)庫類型 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() 有一個布爾類型的參數(shù),通過代碼我們可以看出這個參數(shù)的作用就是返回信息的詳細程度。

    總結(jié)

    今天介紹的是非常簡單的一套數(shù)據(jù)庫擴展組件,它的功能就是這些,在日常的生產(chǎn)環(huán)境中,實際的應用場景其實并不多。簡單的鍵值對我們可以用 PHP 文件序列化來保存,而緩存則

    贊(0)
    分享到: 更多 (0)
    網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號