gjerokrsteski/php-dba-cache

创建一个PHP数据库(dbm-style)抽象层缓存,以缓存您的对象、字符串、整数或数组

v0.2.0 2018-07-04 15:19 UTC

This package is not auto-updated.

Last update: 2024-09-19 02:51:59 UTC


README

php-dba-cache使用数据库(dbm-style)抽象层来缓存/存储您的PHP对象、字符串、整数或数组。即使是SimpleXMLElement的实例也可以放入缓存。您无需关心缓存文件的尺寸。它取决于您的磁盘剩余空间。

Build Status Scrutinizer Quality Score Dependency Status

Oracle Berkeley DB 4持久连接示例

$cache = new Cache(
  '/your/path/to/the/cahe-file/cache.db4', 'db4'
);

$yorObject            = new ObjectYouWantToPutInCache();
$yourObjectIdentifier = 'your:cool:object:identifier';

// check if your object is in the cache.
// you also can ignore it, and let the CacheDba do it for you.
if (true === $cache->has($yourObjectIdentifier)) {
  $cache->delete($yourObjectIdentifier);
}

$cache->put($yourObjectIdentifier, $yorObject);

// than somewhere at your project.
$cache->get($yourObjectIdentifier);

// for the garbage collection 
// you can create an cron-job starting once a day.
$sweep = new Sweep($cache);
$sweep->all();

// or clean all objects older than given expiration since now.
$sweep->old();

使用持久连接将SimpleXMLElement实例保存到DB 4

$string = "<?xml version='1.0'?>
<document>
 <title>Let us cache</title>
 <from>Joe</from>
 <to>Jane</to>
 <body>Some content here</body>
</document>";

$simplexml = simplexml_load_string(
    $string,
    'SimpleXMLElement',
    LIBXML_NOERROR|LIBXML_NOWARNING|LIBXML_NONET
);

$identifier = md5('simplexml_identifier');

$path = dirname(__FILE__).'/simple-xml-test-cache.db4';
$cache = new Cache($path, 'db4');

$cache->put($identifier, $simplexml);

$getObject = $cache->get($identifier);

error_log(' - PUT IN CACHE : '.print_r($simplexml, true));
error_log(' - GET FROM CACHE : '.print_r($getObject, true));

error_log(' - IS SAME OBJECT : '.
    print_r(($simplexml->asXml() === $getObject->asXml())
            ? 'true' : 'false', true));

PHP DBA缓存监控器

响应式Web界面,提供全面、易于使用且外观良好的GUI。它不仅提供对DBA缓存统计参数的访问,还通过提供优化缓存和从缓存中删除条目的舒适功能,使管理运行DBA的Web服务器变得更加容易。

PHP DBA cache Monitor 2014

可用选项

缓存

  • 打开指定的dba数据库
  • 使用给定的键插入新记录(持久或给定过期时间)
  • 使用给定的键获取记录
  • 替换给定键的记录值
  • 删除给定键的记录
  • 返回给定键的元数据:过期时间戳和最后修改时间戳
  • 从缓存中获取所有键

清理 - CacheGarbageCollector(可选)

  • 清除所有条目
  • 清除过期条目
  • 刷新缓存文件
  • 在清理过程后自动优化数据库文件

安装

"通过使用--enable-dba=shared配置选项,您可以构建一个动态可加载的模块以启用PHP对dbm-style数据库的基本支持。您还必须通过指定PHP配置行中的--with-XXXX配置开关来添加对以下至少一种处理器的支持。"

有关安装的更多信息:https://php.ac.cn/manual/en/dba.installation.php

DBA处理器

缓存的各个方面行为取决于您安装的dba-type数据库的实现。我已经使用db4、flatfile、cdb、cdb_make、gdbm等几个数据库处理器进行了测试。cdb & cdb_make系列是最快的,但您必须创建自己的垃圾收集清理器或可以手动删除。请查看测试(https://github.com/gjerokrsteski/php-dba-cache/tree/master/tests)以更好地了解如何使用缓存。

cdb = Tiny Constant Database - 用于读取Cdb是“创建和读取常量数据库的快速、可靠、轻量级包。”它来自qmail的作者,可以在http://cr.yp.to/cdb.html找到。由于它是常量,我们只支持读取操作。自PHP 4.3.0以来,我们通过内部cdb库支持写入(不更新)。

cdb_make = Tiny Constant Database - 用于写入自PHP 4.3.0以来,我们支持使用捆绑的cdb库创建cdb文件。

db4 = Oracle Berkeley DB 4 - 用于读取和写入DB4是Sleepycat Software的DB4。自PHP 4.3.2以来可用。

gdbm = GNU数据库管理器 - 用于读取和写入Gdbm是GNU数据库管理器。

flatfile = 默认数据库扩展 - 用于读取和写入。自PHP 4.3.0以来提供,仅用于与已弃用的dbm扩展兼容,应避免使用。然而,您可以在以这种格式创建的文件中使用它。这种情况发生在配置无法找到任何外部库时。

更多关于要求的信息:https://php.ac.cn/manual/en/dba.requirements.php

有用的信息

并非所有DBA风格的数据库都可以替代键值对,例如CDB。CDB数据库只能处理固定键值对。DBA风格缓存的最佳和最快处理器是:QDBM、Berkeley DB(DB4)、NDBM以及最少的Flatfile。最有问题的是dbm和ndbm,它们与许多安装冲突。原因是,在多个系统中,这些库是多个其他库的一部分。配置测试仅防止您配置功能不健全的单个处理器,但不能防止组合。

DBM兄弟的基准测试

这个基准测试是为了计算处理时间(实际时间)和数据库文件大小。写入测试是存储1,000,000条记录。读取测试是检索所有记录。每条记录的键和值都是8字节字符串,如'00000001'、'00000002'、'00000003'......每个DBM的调整参数都设置为显示其最佳性能。平台:Linux 2.4.31内核、EXT2文件系统、Pentium4 1.7GHz CPU、1024MB RAM、ThinkPad T42编译:gcc 3.3.2(使用-O3)、glibc 2.3.3

结果

NAME        DESCRIPTION                             WRITE TIME  READ TIME   FILE SIZE
QDBM        Quick Database Manager 1.8.74           1.89        1.58        55257
NDBM        New Database Manager 5.1                8.07        7.79        814457
SDBM        Substitute Database Manager 1.0.2       11.32       0.00        606720
GDBM        GNU Database Manager 1.8.3              14.01       5.36        82788
TDB         Trivial Database 1.0.6                  9.64        2.22        51056
CDB         Tiny Constant Database 0.75             0.87        0.80        39065
BDB         Berkeley DB 4.4.20                      9.62        5.62        40956
QDBM-BT-ASC B+ tree API of QDBM (ascending order)   2.37        1.78        24304
QDBM-BT-RND B+ tree API of QDBM (at random)         10.90       4.82        15362
BDB-BT-ASC B+ tree API of BDB (ascending order)     3.04        3.06        27520
BDB-BT-RND B+ tree API of BDB (at random)           10.03       4.15        29120

时间单位为秒。大小单位为千字节。由于数据库在超过100000条记录时损坏,因此无法计算SDBM的读取时间。