Skip to content
/ SHMT Public
forked from sevenval/SHMT

Static Hash Map Table Extension for PHP

License

Notifications You must be signed in to change notification settings

hexon/SHMT

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Software license Build status

SHMT (Static Hash Map Table)

SHMT is an implementation of a very fast key-value read-only hash map table for PHP7.

We have developed SHMT as a faster, dependency-free replacement for the PECL CHDB extension.

Features

SHMT

  • is written in C.
  • creates and uses its own memory-mapped binary file. This enable it to cache and share the loaded pages of the file across multiple processes.
  • has an extremely fast initial load, regardless of the size of the binary file.
  • internally implements a "perfect hash function" and guarantees O(1) lookup time in the worst cases.
  • internally uses the very fast "MurmurHash3" hashing algorithm.
  • doesn't require any external libraries.
  • is PHP 7 and PHP 7.1 ready.

Limitations

  • Supported maximum number of data array elements is 2^26 (67,108,864 on 32 bit systems) and 2^31 (2,147,483,648 on 64 bit systems).
  • The data array keys and values are always cast to string.
  • Data files cannot be exchanged between 32 bit and 64 bit systems or systems with different endianness.
  • The code compiles and runs on Linux systems. Other platforms have not been tested.

PHP Class

public static boolean SHMT::create(string $filename, array $array)
  • Creates a SHMT from the $array and writes it into the file $filename
  • Returns true on success
  • Throws exceptions on errors
public SHMT::__construct(string $filename)
  • Constructs a new SHMT object and maps the SHMT file $filename into memory
  • Throws exceptions on errors
public (string|null) SHMT::get(string $string)
  • Attempts to find the value stored under the key $string
  • Returns the value if the key $string exists, otherwise null

Example

Create a SHMT:

$array = [
	'str_key' => 'test',
	123456789 => 12345
	-1 => ''
];

SHMT::create($filename = 'map.shmt', $array);

Read from a SHMT:

$shmt = new SHMT($filename);

echo $shmt->get('str_key');    // string(4) "test"
echo $shmt->get(123456789);    // string(5) "12345"
echo $shmt->get('123456789');  // string(5) "12345"
echo $shmt->get(-1);           // string(0) ""
echo $shmt->get('abc_xyz');    // NULL

About

Static Hash Map Table Extension for PHP

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C 78.5%
  • PHP 20.6%
  • M4 0.9%