diff options
Diffstat (limited to 'README')
-rw-r--r-- | README | 210 |
1 files changed, 210 insertions, 0 deletions
@@ -0,0 +1,210 @@ + PHP Judy - extension creating and accessing dynamic arrays + ================================================================ + +Content +--------- + 1. Introduction + 2. Directory Contents + 3. How to install + 4. Usage (Examples) + 5. Reporting Bugs + 6. Todo + + +1. INTRODUCTION +----------------- + +php-judy is an extension by Nicolas Brousse for the Judy C library. + -> http://pecl.php.net/package/Judy + -> http://github.com/orieg/php-judy + +(see Section 4 of this document for PHP examples) + +A Judy array is a complex but very fast associative array data structure for +storing and looking up values using integer or string keys. Unlike normal +arrays, Judy arrays may be sparse; that is, they may have large ranges of +unassigned indices. + + -> http://en.wikipedia.org/wiki/Judy_array + +The PHP extension is base on the Judy C library that implements a dynamic array. +A Judy array consumes memory only when populated yet can grow to take advantage +of all available memory. Judy's key benefits are: scalability, performance, +memory efficiency, and ease of use. Judy arrays are designed to grow without +tuning into the peta-element range, scaling near O(log-base-256) -- 1 more RAM +access at 256 X population. + + -> http://judy.sourceforge.net + +2. PHP JUDY TOP DIRECTORY CONTENTS: +------------------------------------ + +README This file. +LICENSE The PHP License used by this project. +EXPERIMENTAL Note about the status of this package. + +lib/ Header and source libraries used by the package. +libjudy/ Bundled libJudy. +tests/ Unit tests. +*.c, *.h Header and source files used to build the package. +*.php PHP test/examples scripts. + + +3. HOW TO INSTALL +------------------ + + A. Linux + + From the PHP Judy sources : + + phpize + ./configure --with-judy[=DIR] + make + make test + make install + + If you are using Ubuntu or Debian, you can install libJudy with apt : + + apt-get install libjudydebian1 libjudy-dev + phpize + ./configure --with-judy=/usr + make + make test + make install + + B. Windows + + On Windows, you will need to build LibJudy yourself. + + Download the sources at + + http://sourceforge.net/projects/judy/ + + Extract the sources, and open the Visual Studio command prompt and navigate to + the source directory. Then execute: + + build + + This creates "Judy.lib", copy this into the php-sdk library folder and name it + + libJudy.lib + + Then copy the include file "judy.h" into the php-sdk includes folder. Now its + time to build pecl/judy, extract the pecl/judy into your build folder where + the build scripts will be able to pick it up, e.g.: + + C:\php\pecl\judy\ + + If your source of PHP is located in: + + C:\php\src\ + + The rest of the steps is pretty straight forward, like any other external + extension: + + buildconf + configure --with-judy=shared + nmake + + C. Mac OS X + + You will need to install the libJudy first. Download the sources at + + http://sourceforge.net/projects/judy/ + + Extract the sources, then cd into the source directory and execute : + + ./configure + make + make install + + Use pecl to install the PHP Judy extension : + + sudo pecl -d preferred_state=beta install Judy + + +4. USAGE (EXAMPLES) +------------------ + +Judy's array can be used like usual PHP arrays. The difference will be in the +type of key/values that you can use. Judy arrays are optimised for memory usage +but it force to some limitation in the PHP API. + +There is currently 5 type of PHP Judy Arrays : + - BITSET (using Judy1) + - INT_TO_INT (using JudyL) + - INT_TO_MIXED (using JudyL) + - STRING_TO_INT (using JudySL) + - STRING_TO_MIXED (using JudySL) + +You can use foreach() and the PHP array notation on all PHP Judy arrays. + + A. BITSET + + Bitset implementation is quite basic for now. It allow you to set a bunch of index + setting the value to false will be the same than using unset(). + + $bitset = new Judy(Judy::BITSET); + $bitset[124] = true; + ... + + print $bitset[124]; // will print 1 + + $bitset[124] = false; // is the same as unset($bitset[124]) + + B. INT_TO_INT + + This type let you create an array with key and value of integer, and integer only. + + $int2int = new Judy(Judy::INT_TO_INT); + $int2int[125] = 17; + ... + + print $int2int[125]; // will print 17 + + C. INT_TO_MIXED + + This type let you create an array with key as integer and value of any type, including + other judy array or any object. + + $int2mixed = new Judy(Judy::INT_TO_MIXED); + $int2mixed[1] = "one"; + $int2mixed[2] = array('a', 'b', 'c'); + $int2mixed[3] = new Judy(Judy::BITSET); + + D. STRING_TO_INT + + This type let you create an array with key as string (currently limited to 65536 char.) + and an integer as the value. + + $string2int = new Judy(Judy::STRING_TO_INT); + $string2int["one"] = 1; + $string2int["two"] = 2; + + print $string2int["one"]; // will print 1 + + E. STRING_TO_MIXED + + This type let you create an array with key as string and values of any type, including + other judy array or any objects. + + $string2mixed = new Judy(Judy::STRING_TO_MIXED); + $string2mixed["string"] = "hello world!"; + $string2mixed["array"] = array('a', 'b', 'c'); + $string2mixed["integer"] = 632; + $string2mixed["bitset"] = new Judy(Judy::BITSET); + + +5. REPORTING BUGS +------------------ + +If you encounter a bug, please submit it via the bug tracker on Git Hub: + + https://github.com/orieg/php-judy/issues + + +6. TODO +-------- + + * Implements comparator and cast handler + * Add bitset comparator (cf. Judy1Op sample) |