torden/php-mdbm

PHP-mdbm 是 PHP 绑定到 MDBM 的库。

v0.1.2 2022-09-01 03:25 UTC

README

  • PHP-mdbm 是 PHP 绑定到 Yahoo! MDBM C API.
  • MDBM 是一种超级快速的内存映射键值存储。
  • MDBM 是基于 sdbm(它基于 Per-Aake Larson 的动态哈希算法)的 ndbm 兼容的哈希数据库库。
  • MDBM 是一个高性能的内存映射哈希数据库,类似于自制的 libhash。
  • 存储在 mdbm 数据库中的记录可能具有任意和可变长度的键和值。

目录

API

几乎支持所有有用的 API。

不支持的 API

遗憾的是,以下列表中的 API 目前不支持。

如果您需要它们,请随时提出问题

已弃用 API

仅支持 V2 实现

支持两个版本兼容性

PHP

MDBM

安装

MDBM

php-mdbm

使用 composer(packagist)

有关使用 composer 的说明,请参阅 composer 文档

composer require torden/php-mdbm

使用源代码

git clone https://github.com/torden/php-mdbm
或下载 tarball (标签或发布)
wget https://github.com/torden/php-mdbm/archive/vX.X.X.tar.gz
tar xvzf vX.X.X.tar.gz
编译
cd php-mdbm/src/
$PHP_INSTALLED_PATH/bin/phpize
./configure --with-php-config=$PHP_INSTALLED_PATH/bin/php-config --with-mdbm=/usr/local/mdbm/
make
#make test TESTS='-q -m'
#make test TESTS='-q'
make install
配置
echo "extension=mdbm.so" >> php.ini
检查
$PHP_INSTALLED_PATH/bin/php -i | fgrep -i mdbm
...
mdbm
MDBM Support => enable
MDBM API Version => 4
PHP MDBM Version => 0.1.0
...

示例

有关更多详细信息,请参阅 文档

基准测试

以下是对 PHP-mdbm 与 PHP SQLite3 的基准测试结果,用于简单的数据存储和随机检索。

请参阅 源代码

准备基准测试

cd php-mdbm/src/benchmark/
composer install

规格

主机

虚拟机

软件

简单的 INSERT 操作

php src/mdbm_simple_store.php -live
 Created by B. van Hoekelen version 2.3.2 PHP v7.0.26
 Max memory 128M, max execution time unlimited on 2018-01-21 01:33:02

   Label                                                         Time        Memory        Peak
---------------------------------------------------------------------------------------------------
 > Calibrate point                                               2.86 μs |    0.00 KB |    2.00 MB
 > mdbm store(number, number) :: 100,000                       297.88 ms |    0.00 KB |    2.00 MB
 > mdbm store(string, string) :: 100,000                       329.36 ms |    0.00 KB |    2.00 MB
 > mdbm store(number, number) :: 1,000,000                       2.94  s |    0.00 KB |    2.00 MB
 > mdbm store(string, string) :: 1,000,000                       3.36  s |    0.00 KB |    2.00 MB
 > mdbm store(number, number):: 10,000,000                       70.4  s |    0.00 KB |    2.00 MB
 > mdbm store(string, string) :: 10,000,000                    125.46  s |    0.00 KB |    2.00 MB
---------------------------------------------------------------------------------------------------
   Total 7 taken                             01-21 01:36:25    202.78  s      0.00 KB      2.00 MB

简单的随机检索

php src/mdbm_simple_fetch.php -live
 Created by B. van Hoekelen version 2.3.2 PHP v7.0.26
 Max memory 128M, max execution time unlimited on 2018-01-21 01:37:49

   Label                                                         Time        Memory        Peak
---------------------------------------------------------------------------------------------------
 > Calibrate point                                               4.05 μs |    0.00 KB |    2.00 MB
 > mdbm random fetch(number) :: 100,000                        140.18 ms |    0.00 KB |    2.00 MB
 > mdbm random fetch(string) :: 100,000                        161.95 ms |    0.00 KB |    2.00 MB
 > mdbm random fetch(number) :: 1,000,000                        1.44  s |    0.00 KB |    2.00 MB
 > mdbm random fetch(string) :: 1,000,000                        1.63  s |    0.00 KB |    2.00 MB
 > mdbm random fetch(number):: 10,000,000                       15.07  s |    0.00 KB |    2.00 MB
 > mdbm random fetch(number) :: 10,000,000                      16.97  s |    0.00 KB |    2.00 MB
---------------------------------------------------------------------------------------------------
   Total 7 taken                             01-21 01:38:24     35.42  s      0.00 KB      2.00 MB

使用预加载 API 的简单随机检索

php src/mdbm_simple_preload_fetch.php -live
 Created by B. van Hoekelen version 2.3.2 PHP v7.0.26
 Max memory 128M, max execution time unlimited on 2018-01-21 01:39:36

   Label                                                         Time        Memory        Peak
---------------------------------------------------------------------------------------------------
 > Calibrate point                                               4.05 μs |    0.00 KB |    2.00 MB
 > mdbm::preload random fetch(number) :: 100,000               138.52 ms |    0.00 KB |    2.00 MB
 > mdbm::preload random fetch(string) :: 100,000               154.26 ms |    0.00 KB |    2.00 MB
 > mdbm::preload random fetch(number) :: 1,000,000                1.4  s |    0.00 KB |    2.00 MB
 > mdbm::preload random fetch(string) :: 1,000,000               1.58  s |    0.00 KB |    2.00 MB
 > mdbm::preload random fetch(number):: 10,000,000              14.83  s |    0.00 KB |    2.00 MB
 > mdbm::preload random fetch(number) :: 10,000,000             16.73  s |    0.00 KB |    2.00 MB
---------------------------------------------------------------------------------------------------
   Total 7 taken                             01-21 01:40:11     34.83  s      0.00 KB      2.00 MB

SQLite3

简单的 INSERT 操作

php src/sqlite3_simple_store.php -live
PRAGMA synchronous=OFF;
pragma journal_mode = wal;
Transaction(BEGIN,COMMIT)

 Created by B. van Hoekelen version 2.3.2 PHP v7.0.26
 Max memory 128M, max execution time unlimited on 2018-01-22 00:44:56

   Label                                                         Time        Memory        Peak
---------------------------------------------------------------------------------------------------
 > Calibrate point                                               4.05 μs |    0.00 KB |    2.00 MB
 > sqlite3 insert(number, number) :: 100,000                    761.78 ms |    0.00 KB |    2.00 MB
 > sqlite3 insert(string, string) :: 100,000                      1.17  s |    0.00 KB |    2.00 MB
 > sqlite3 insert(number, number) :: 1,000,000                    7.93  s |    0.00 KB |    2.00 MB
 > sqlite3 insert(string, string) :: 1,000,000                   12.29  s |    0.00 KB |    2.00 MB
 > sqlite3 insert(number, number):: 10,000,000                   80.24  s |    0.00 KB |    2.00 MB
 > sqlite3 insert(string, string) :: 10,000,000                 127.54  s |    0.00 KB |    2.00 MB
---------------------------------------------------------------------------------------------------
   Total 7 taken                             01-22 01:00:25    229.93  s      0.00 KB      2.00 MB

简单的随机检索

php src/sqlite3_simple_fetch.php -live
PRAGMA synchronous=OFF;
pragma journal_mode = wal;

 Created by B. van Hoekelen version 2.3.2 PHP v7.0.26
 Max memory 128M, max execution time unlimited on 2018-01-22 01:23:53

   Label                                                         Time        Memory        Peak
---------------------------------------------------------------------------------------------------
 > Calibrate point                                               4.05 μs |    0.00 KB |    2.00 MB
 > sqlite3 random fetch(number) :: 100,000                       2.16  s |    0.00 KB |    2.00 MB
 > sqlite3 random fetch(string) :: 100,000                       3.16  s |    0.00 KB |    2.00 MB
 > sqlite3 random fetch(number) :: 1,000,000                    25.94  s |    0.00 KB |    2.00 MB
 > sqlite3 random fetch(string) :: 1,000,000                    34.84  s |    0.00 KB |    2.00 MB
 > sqlite3 random fetch(number):: 10,000,000                   275.47  s |    0.00 KB |    2.00 MB
 > sqlite3 random fetch(string) :: 10,000,000                  397.42  s |    0.00 KB |    2.00 MB
---------------------------------------------------------------------------------------------------
   Total 7 taken                             01-22 01:36:12    738.99  s      0.00 KB      2.00 MB

链接

请随意。希望这能对您有所帮助。