Maison  >  Article  >  développement back-end  >  Introduction détaillée à l'extension PHP DBA

Introduction détaillée à l'extension PHP DBA

醉折花枝作酒筹
醉折花枝作酒筹avant
2021-06-10 16:59:562552parcourir

Cet article vous présentera en détail l’extension DBA de PHP. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Introduction détaillée à l'extension PHP DBA

Apprentissage DBA étendu en PHP

Le DBA dont nous parlons aujourd'hui n'est pas un DBA d'administrateur de base de données traditionnel, mais un style Buckley dans les extensions de base de données PHP. La base de données de style Buckley est en fait ce que nous appelons souvent une base de données K/V sous la forme de paires clé-valeur. Tout comme Memcached ou Redis, que nous utilisons habituellement beaucoup, une seule clé correspond à une valeur, mais Memcached les stocke principalement en mémoire, tandis que l'extension DBA stocke les données dans des fichiers, tout comme une simple clé. Identique à SQLite sous forme de paire de valeurs.

Les types de bases de données utilisés par les extensions DBA sont essentiellement open source, et le déploiement et la publication sont très simples. Il s'agit simplement d'un fichier db, il est donc très similaire à SQLite. Mais l'inconvénient est qu'il chargera immédiatement le fichier de base de données dans la mémoire. Nous ne pouvons pas rendre la base de données trop volumineuse, sinon la mémoire sera saturée. La base de données DBA est toujours associée au programme, elle ne dispose donc pas d'interfaces liées au réseau. Nous utilisons généralement ce type de base de données uniquement localement dans le code.

Lors de l'installation, nous devons ajouter la configuration --enable-dba=shared lors de la compilation, puis ajouter une configuration --enable-XXXX XXXX fait référence à la base de données de style Buckley que nous voulons utiliser. les plus courants incluent dbm, ndbm, gdbm, db2, etc. De même, le système d'exploitation doit également installer ces logiciels associés. Par exemple, notre système est installé avec gdbm, qui doit être installé à l'aide de yum install.

Un exemple simple

Regardons d'abord le code pour voir comment notre base de données DBA est utilisée.

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

Tout d'abord, utilisez dba_open() pour ouvrir un fichier de base de données, le le premier paramètre est le chemin du fichier de base de données, le deuxième paramètre est la méthode d'ouverture, y compris r, w, c, n, r signifie lecture seule, w signifie lecture-écriture, c signifie créer plus lecture-écriture, n signifie si non Il est créé et peut être lu et écrit. Le troisième paramètre est le type de base de données spécifié. Seule la bibliothèque gdbm est installée dans notre système, nous utilisons donc gdbm comme paramètre. Comme MySQL, nous pouvons également utiliser dba_popen() pour ouvrir un lien persistant vers un fichier de données.

La fonction dba_replace() ajoute ou remplace une donnée si la donnée n'existe pas, elle en ajoutera une nouvelle. Si elle existe, elle remplacera la valeur de la clé correspondante. Le premier paramètre est la clé et le deuxième paramètre est la valeur des données.

dba_exists() sert à déterminer si la clé spécifiée existe. Si elle existe, nous obtiendrons les données spécifiées par la clé via dba_fetch() dans ce if.

dba_close() est comme les autres handles d'opération de données, il ferme le handle de connexion à la base de données.

Ajouter, parcourir et supprimer des données

Dans l'exemple ci-dessus, nous utilisons dba_replace() pour ajouter des données. En fait, il existe des fonctions spéciales pour l'ajout formel de données.

// 添加数据
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() sert à insérer des données. Il ne remplacera pas les données de clé existantes. Si les informations de clé existantes sont insérées, false sera renvoyé.

dba_firstkey() est utilisé pour obtenir la première clé, dba_nextkey() est utilisé pour obtenir la clé suivante Grâce à ces deux fonctions, nous pouvons obtenir toutes les informations clés dans toute la base de données, puis celles-ci. les clés sont utilisées pour parcourir tout ce qui se trouve dans la base de données entière.

dba_delete() supprime une donnée basée sur la clé.

Optimiser et synchroniser la base de données

Même pour MySQL, après une utilisation à long terme, nous devons effectuer un travail d'optimisation, comme laisser MySQL défragmenter automatiquement les fichiers, organiser les index, etc. utilise L'instruction SQL est la suivante : optimiser le nom de la table. De la même manière, l'extension DBA nous offre également une telle fonction.

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

De plus, tout comme le cache de MySQL, le DBA mettra également en cache lors de l'exploitation des données. À ce stade, nous pouvons utiliser une fonction pour forcer les données du cache à être vidées dans le fichier du disque dur.

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

Liste des bases de données actuellement ouvertes

Nous pouvons utiliser une fonction pour voir quelles connexions de données sont actuellement ouvertes, car DBA est une simple base de données basée sur des fichiers, nous pouvons donc l'ouvrir dans un morceau de code Plusieurs connexions de données.

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

Types de bases de données pris en charge par le système

Enfin, regardons une fonction de support, qui peut renvoyer les types de bases de données actuellement pris en charge par notre base de données.

// 当前支持的数据库类型
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() a un paramètre booléen. D'après le code, nous pouvons voir que la fonction de ce paramètre est de renvoyer le niveau d'information détaillé.

Résumé

Ce que nous avons présenté aujourd'hui est un ensemble très simple de composants d'extension de base de données. Ses fonctions ne sont que celles-ci. Dans les environnements de production quotidiens, il n'y a pas beaucoup de scénarios d'application réels. Nous pouvons utiliser la sérialisation de fichiers PHP pour enregistrer de simples paires clé-valeur, tandis que la mise en cache utilisera principalement des outils tels que Memcached, afin que vous puissiez en apprendre davantage.

Code de test :

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

Apprentissage recommandé : Tutoriel vidéo php

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer