Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introduction to Aerospike with PHP

Introduction to Aerospike with PHP

Avatar for Mariusz Gil

Mariusz Gil

March 12, 2015
Tweet

More Decks by Mariusz Gil

Other Decks in Programming

Transcript

  1. id username attribute_1 attribute_2 1 atermida 1 2 saturn 2

    3 zeus 3 7 … … … … attribute_n 9 …
  2. id username 1 atermida 2 saturn 3 zeus … …

    user_id attribute_id value 1 342 1 2 342 2 3 343 3 … … … user_id attribute_id value 1 348 abc 2 348 abd 3 900 eee … … …
  3. id username attr_1 attr_2 attr_3 1 atermida 1 2 saturn

    2 3 zeus [1, 3, 4] … … … … …
  4. aql> insert into test.users (PK, username, attr_1) values ('atena', 'atena',

    1); OK, 1 record affected. aql> insert into test.users (PK, username, attr_2) values ('zeus', 'zeus', 2); OK, 1 record affected. aql> insert into test.users (PK, username, attr_3) values ('saturn', 'saturn', 'JSON{"account": "silver", "balance":0}'); OK, 1 record affected. aql> select * from test.users +----------+--------+--------+-----------------------------------+ | username | attr_2 | attr_1 | attr_3 | +----------+--------+--------+-----------------------------------+ | "zeus" | 2 | | | | "atena" | | 1 | | | "saturn" | | | {"account":"silver", "balance":0} | +----------+--------+--------+-----------------------------------+ 3 rows in set (0.375 secs) aql> select * from test.users where PK='atena' +----------+--------+ | username | attr_1 | +----------+--------+ | "atena" | 1 | +----------+--------+ 1 row in set (0.000 secs)
  5. aql> execute list.push('mylist', 'a') on test.demo where PK = '1'

    +------+ | push | +------+ | 1 | +------+ 1 row in set (0.000 secs) aql> execute list.push('mylist', 'b') on test.demo where PK = '1' +------+ | push | +------+ | 2 | +------+ 1 row in set (0.000 secs) aql> execute list.push('mylist', 'c') on test.demo where PK = '1' +------+ | push | +------+ | 3 | +------+ 1 row in set (0.000 secs) aql> execute list.peek('mylist', 3) on test.demo where PK = '1' +--------------------------+ | peek | +--------------------------+ | ["c", "b", "a"] | +--------------------------+ 1 row in set (0.000 secs)
  6. installation # Install dependencies sudo apt-get install build-essential autoconf libssl-dev

    sudo apt-get install php5-dev php-pear # Build extension composer require aerospike/aerospike-client-php "*" find vendor/aerospike/aerospike-client-php/ -name "*.sh" -exec chmod +x {} \; cd vendor/aerospike/aerospike-client-php/ && composer run-script post-install-cmd # Create ini file extension=aerospike.so aerospike.udf.lua_system_path=/path/to/client-php/sys-lua aerospike.udf.lua_user_path=/path/to/client-php/usr-lua
  7. $config = [ "hosts" => [ ["addr" => "127.0.0.1", "port"

    => 3000] ] ]; $db = new Aerospike($config); $key = $db->initKey("infosphere", "characters", 1234); $db->put($key, ["name" => "Scruffy", "Occupation" => "The Janitor"]); $db->put($key, [ "quotes" => [ "I'm Scruffy. The janitor.", "I'm on break.", "Scruffy's gonna die like he lived.", ] ]); $db->get($key, $record, ["name", "quotes"]); $db->close(); simple flow
  8. $db->scan("infosphere", "characters", function ($record) { var_dump($record); }, ["name"]); $where =

    Aerospike::predicateBetween("age", 30, 39); $status = $db->query("infosphere", "characters", $where, function ($record) { var_dump($record); }, ["name", "age"]); scans and queries
  9. $status = $db->register('/path/to/my_udf.lua', 'my_udf'); $key = $db->initKey('test', 'demo', 'foo'); $db->apply($key,

    "sample", "list_append", ["things", "!!!"]); $status = $db->scanApply("test", "users", "rec_udf", "accumulate", ["balance", "income"], $scan_id); $where = Aerospike::predicateBetween("age", 20, 29); $status = $db->aggregate("test", "users", $where, "mymod", "group_count", ["first_name"], $names); user definied functions
  10. $key = $db->initKey("test", "shows", "Futurama"); $db->put($key, [ "creator" => ["Matt

    Groening", "David X Cohen"], "broadcast" => [[1999,2003], [2008,2013]], ]); $characters = new \Aerospike\LDT\LSet($db, $key, 'characters'); $characters->add('Professor Hubert J. Farnsworth'); $characters->addMany([ "Amy Wong", "Hermes Conrad", "Dr. John A. Zoidberg", "Tarunga Leela", "Philip J. Fry", "Bender Bending Rodriguez", "Scruffy", "Cubert Farnsworth” ]); large data types