- PHP-mdbm is a PHP binds to Yahoo! MDBM C API.
- MDBM is a super-fast memory-mapped key/value store.
- MDBM is an ndbm work-alike hashed database library based on sdbm which is based on Per-Aake Larson’s Dynamic Hashing algorithms.
- MDBM is a high-performance, memory-mapped hash database similar to the homegrown libhash.
- The records stored in a mdbm database may have keys and values of arbitrary and variable lengths.
Build Stats | PHP-mdbm ver. | License | Y! mdbm ver. |
---|---|---|---|
Almost Useful APIs Support.
Unfortunately, the following list are not supported on now.
Group | API |
---|---|
Record Iteration | mdbm_iterate |
Data Management | mdbm_clean, mdbm_prune, mdbm_set_cleanfunc |
Statistics | mdbm_chunk_iterate |
Cache and Backing Store | mdbm_set_backingstore |
Import and Export | mdbm_cdbdump_to_file, mdbm_cdbdump_trailer_and_close, mdbm_cdbdump_add_record, mdbm_dbdump_to_file, mdbm_dbdump_trailer_and_close, mdbm_dbdump_add_record, mdbm_dbdump_export_header, mdbm_dbdump_import_header, mdbm_dbdump_import, mdbm_cdbdump_import |
If you want them, please feel free to raise an issue
API | STATUS | COMMENT |
---|---|---|
mdbm_save | DEPRECATED | mdbm_save is only supported for V2 MDBMs. |
mdbm_restore | DEPRECATED | mdbm_restore is only supported for V2 MDBMs. |
mdbm_sethash | DEPRECATED | Legacy version of mdbm_set_hash() This function has inconsistent naming, an error return value. It will be removed in a future version. |
API | STATUS | COMMENT |
---|---|---|
mdbm_stat_all_page | V3 not supported | There is only a V2 implementation. V3 not currently supported. |
mdbm_stat_header | V3 not supported | There is only a V2 implementation. V3 not currently supported. |
Version | Support | Test |
---|---|---|
5.2.x ~ 5.6.x | yes | always |
7.x | yes | always |
8.x | yes | always |
branch or release ver. | Support | Test | Comment |
---|---|---|---|
master | yes | always | |
4.x | yes | always |
See the composer documentation for use composer
composer require torden/php-mdbm
git clone https://github.com/torden/php-mdbm
Or Download the tarball (tag or release)
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
...
See the documentation for more details.
The following is results of PHP-mdbm vs PHP SQlite3 benchmarks for simple data storing and random fetching.
See the Source Code.
cd php-mdbm/src/benchmark/
composer install
Type | Spec |
---|---|
CPU | Inte i-7 |
RAM | DDR4 32G |
HDD | Nvme M.2 SSD |
Type | Spec |
---|---|
Machine | VM(VirtualBox) |
OS | Ubuntu 17.10.1 (Artful Aardvark) |
CPU | 2 vCore |
RAM | 8G |
Type | Version | Comment |
---|---|---|
PHP | 7.0.26 | --- |
php-mdbm | v0.1.0 | --- |
mdbm | master branch | --- |
SQLite3 | 3.19.3 | Async, Transaction, journal_mode = wal |
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
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
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
- Yahoo! MDBM
- MDBM::Concept
- MDBM::Build
- MDBM::Document
- MDBM::FAQ
- DBM
- MDBM::Macro(const)
- Packagist
- MDBM Packages
- Go-mdbm
- Py-mdbm
- Upgrading PHP extensions from PHP5 to NG
Please feel free. I hope it is helpful for you.