Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Einführung in die PHP-DBA-Erweiterung

Detaillierte Einführung in die PHP-DBA-Erweiterung

醉折花枝作酒筹
醉折花枝作酒筹nach vorne
2021-06-10 16:59:562529Durchsuche

Dieser Artikel stellt Ihnen die DBA-Erweiterung von PHP im Detail vor. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

Detaillierte Einführung in die PHP-DBA-Erweiterung

Lernen der PHP-DBA-Erweiterung

Der DBA, über den wir heute sprechen, ist nicht der traditionelle Datenbankadministrator-DBA, sondern eine Erweiterung der Datenbank im Barkley-Stil in PHP. Die Datenbank im Buckley-Stil ist eigentlich das, was wir oft als K/V-Datenbank in Form von Schlüssel-Wert-Paaren bezeichnen. Genau wie Memcached oder Redis, die wir normalerweise häufig verwenden, entspricht nur ein Schlüssel einem Wert, aber Memcached speichert sie hauptsächlich im Speicher, während die DBA-Erweiterung Daten in Dateien speichert, genau wie ein einfacher Schlüssel. Entspricht SQLite in Wertepaarform.

Die von DBA-Erweiterungen verwendeten Datenbanktypen sind grundsätzlich Open Source, und die Bereitstellung und Veröffentlichung ist sehr einfach. Es handelt sich lediglich um eine Datenbankdatei, daher ist sie SQLite sehr ähnlich. Der Nachteil besteht jedoch darin, dass die Datenbankdatei sofort in den Speicher geladen wird. Wir können die Datenbank nicht zu groß machen, da sie sonst den Speicher sprengt. Die DBA-Datenbank ist immer zusammen mit dem Programm vorhanden, verfügt also nicht über netzwerkbezogene Schnittstellen. Wir verwenden diese Art von Datenbank im Allgemeinen nur lokal im Code.

Während der Installation müssen wir die Konfiguration --enable-dba=shared hinzufügen und dann eine Konfiguration --enable-XXXX hinzufügen, die sich auf den Typ der Datenbank im Barkley-Stil bezieht, die wir verwenden möchten dbm, ndbm, gdbm, db2 und so weiter. Ebenso muss das Betriebssystem diese zugehörige Software installieren. Beispielsweise wird unser System mit gdbm installiert, das mit yum install installiert werden muss.

Ein einfaches Beispiel

Schauen wir uns zunächst an, wie unsere DBA-Datenbank über den Code verwendet wird.

// 打开一个数据库文件
$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);

Verwenden Sie zunächst dba_open(), um eine Datenbankdatei zu öffnen Der zweite Parameter ist der Öffnungsmodus, einschließlich r, w, c, n. r bedeutet schreibgeschützt, w bedeutet lesen/schreiben, c bedeutet erstellen plus lesen/schreiben, n bedeutet erstellen, wenn nicht, und kann lesen/schreiben. Der dritte Parameter ist der angegebene Datenbanktyp. In unserem System ist nur die GDBM-Bibliothek installiert, daher verwenden wir GDBM als Parameter. Wie MySQL können wir auch dba_popen() verwenden, um einen dauerhaften Link zu einer Datendatei zu öffnen. Die Funktion

dba_replace() fügt ein Datenelement hinzu oder ersetzt es. Wenn die Daten nicht vorhanden sind, wird ein neues hinzugefügt. Wenn es vorhanden ist, wird der Wert des entsprechenden Schlüssels ersetzt. Der erste Parameter ist der Schlüssel und der zweite Parameter ist der Wert der Daten.

dba_exists() dient dazu, festzustellen, ob der angegebene Schlüssel vorhanden ist. Wenn er existiert, erhalten wir die durch den Schlüssel angegebenen Daten über dba_fetch() in diesem Fall.

dba_close() ist genau wie andere Datenoperationshandles, es schließt das Datenbankverbindungshandle.

Daten hinzufügen, durchlaufen und löschen

Im obigen Beispiel haben wir dba_replace() zum Hinzufügen von Daten verwendet. Tatsächlich gibt es spezielle Funktionen für das formale Hinzufügen von Daten.

// 添加数据
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() dient zum Einfügen von Daten. Es ersetzt nicht die vorhandenen Schlüsseldaten. Wenn es die vorhandenen Schlüsselinformationen einfügt, wird „false“ zurückgegeben.

dba_firstkey() wird verwendet, um den ersten Schlüssel abzurufen, und dba_nextkey() wird verwendet, um den nächsten Schlüssel abzurufen. Mit diesen beiden Funktionen können wir alle Schlüsselinformationen in der gesamten Datenbank abrufen und diese Schlüssel dann durchlaufen . Alles in der gesamten Datenbank.

dba_delete() dient zum Löschen eines Datenelements basierend auf dem Schlüssel.

Datenbanken optimieren und synchronisieren

Auch für MySQL müssen wir nach längerer Nutzung einige Optimierungsarbeiten durchführen, z. B. MySQL automatisch Dateien defragmentieren, Indizes organisieren usw. Die verwendete SQL-Anweisung lautet: Tabellenname optimieren. Auf die gleiche Weise bietet uns auch die DBA-Erweiterung eine solche Funktion.

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

Darüber hinaus speichert der DBA genau wie der MySQL-Cache auch Daten im Cache. Zu diesem Zeitpunkt können wir eine Funktion verwenden, um zu erzwingen, dass die Daten im Cache in die Festplattendatei geleert werden.

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

Aktuell geöffnete Datenbankliste

Wir können eine Funktion verwenden, um zu sehen, welche Datenverbindungen derzeit geöffnet sind, da DBA eine einfache dateibasierte Datenbank ist, sodass wir mehrere Datenverbindungen in einem Code öffnen können.

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

Vom System unterstützte Datenbanktypen

Schauen wir uns abschließend noch eine Supportfunktion an, die die aktuell von unserer Datenbank unterstützten Datenbanktypen zurückgeben kann.

// 当前支持的数据库类型
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() hat einen booleschen Parameter. Aus dem Code können wir ersehen, dass die Funktion dieses Parameters darin besteht, die detaillierte Informationsebene zurückzugeben.

Zusammenfassung

Was wir heute vorgestellt haben, ist ein sehr einfacher Satz von Datenbankerweiterungskomponenten. In täglichen Produktionsumgebungen gibt es nicht viele tatsächliche Anwendungsszenarien. Wir können die PHP-Dateiserialisierung verwenden, um einfache Schlüssel-Wert-Paare zu speichern, während beim Caching hauptsächlich Tools wie Memcached verwendet werden, sodass Sie mehr darüber erfahren können.

Testcode:

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

Empfohlenes Lernen: php-Video-Tutorial

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in die PHP-DBA-Erweiterung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen