Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Introduction to Aerospike with PHP
Search
Mariusz Gil
March 12, 2015
Programming
890
8
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Introduction to Aerospike with PHP
Mariusz Gil
March 12, 2015
More Decks by Mariusz Gil
See All by Mariusz Gil
Aspect Oriented Programming
mariuszgil
1
350
Designing and implementing GraphQL API
mariuszgil
1
120
Discovering unknown with EventStorming ConFoo
mariuszgil
0
330
Game of Developer Life... Deconstructed
mariuszgil
1
210
Back to forgotten roots
mariuszgil
1
460
Go micro with microservices
mariuszgil
5
730
Machine Learning for the rescue
mariuszgil
0
470
Discovering graph structures
mariuszgil
3
570
Processing events at scale
mariuszgil
2
410
Other Decks in Programming
See All in Programming
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
370
Seven New Principles of Software Engineering
yegor256
0
250
phperだってパンチカードでコーディングしたい
o0h
PRO
0
400
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Kaigi on Rails 2026, Tokyo, Japan
marcoroth
2
320
우리의 Nitro Modules는 당신의 Turbo Modules보다 아름답다
l2hyunwoo
0
190
JIS keyboard support in Omarchy
lef237
0
160
contenteditable と日本語入力に向き合う
colorful12
0
210
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
280
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.7k
Domain-Driven Transformation
hschwentner
2
2.3k
オーケストレーション記述言語 Katari
yukikurage
0
190
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.7k
Featured
See All Featured
Technical Leadership for Architectural Decision Making
baasie
3
610
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
3.5k
4 Signs Your Business is Dying
shpigford
187
23k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.8k
How to train your dragon (web standard)
notwaldorf
96
6.9k
Crafting Experiences
bethany
1
390
Building an army of robots
kneath
307
47k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
530
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.9k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Accessibility Awareness
sabderemane
1
260
Transcript
M a r i u s z G i l
P H P
about me
frontend application cache data store
data store
data store scaling is hard
SQL way denormalization / partitioning / sharding
id username attribute_1 attribute_2 1 atermida 1 5 2 saturn
3 2 3 zeus 3 7 … … … …
id username attribute_1 attribute_2 1 atermida 1 2 saturn 2
3 zeus 3 7 … … … … attribute_n 9 …
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 … … …
noSQL way scalability / consistency / availability / partitioning
None
None
None
namespaces sets records bins
nodes clusters namespaces sets
id username attr_1 attr_2 attr_3 1 atermida 1 2 saturn
2 3 zeus [1, 3, 4] … … … … …
simple and complex data types
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)
record and stream Lua UDFs
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)
PHP way native client
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
$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
$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
$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
$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
use cases
None
None
Don’t trust instead, do your own benchmarks in your env
Thanks! @mariuszgil