Slide 1

Slide 1 text

PHP & MongoDB Iz prve ruke

Slide 2

Slide 2 text

O predavaču Nebojša Kamber @nebkam

Slide 3

Slide 3 text

✘ Senior PHP programer, u Infostudu 5 godina ✘ Sertifikovan za rad sa MongoDB od 2013. ✘ Radio sa PHP i NodeJS drajverima prve i druge generacije

Slide 4

Slide 4 text

Nastanak MongoDB ✘ Proizvod kompanije 10gen Inc, rezultat iskustva iz DoubleClick ✘ Nastao nakon 12 custom DB rešenja

Slide 5

Slide 5 text

MongoDB verzije ✘ Open source od 2007. ✘ Komercijalna verzija od 2010. ✘ MongoDB Atlas od ove godine

Slide 6

Slide 6 text

Poznato okruženje JSON Dokumenti i upiti CLI Primarni za administraciju baze Javascript SpiderMonkey engine

Slide 7

Slide 7 text

Name Version Created MySQL 5.7 1995-05-23 SQLite 3.13 2000-08-01 Dokumentno-orijentisan data model { name: "MongoDB", author: { name: "10gen Inc" }, version: [3, 2, 0] }

Slide 8

Slide 8 text

Hosting baze Self-hosted Više kontrole Komplikovano Cloud Skalabilno Potrebno konfigurisati DBaaS Konfigurisano Monitoring

Slide 9

Slide 9 text

PHP Drajver (2015) C ekstenzija Composer biblioteka

Slide 10

Slide 10 text

Povezivanje $client = new MongoDB\Client("mongodb://localhost:27017") $collection = $client->selectCollection($dbName, "events"); Kolekcija ≈ Tabela

Slide 11

Slide 11 text

Dodavanje dokumenata $event = new Event(...); try { $collection->insertOne($event); } catch (Exception $exc) {} Dokument ≈ Red

Slide 12

Slide 12 text

Pretraga dokumenata $event = $collection->findOne(["title" => "DaFED"]); $events = $collection ->find(["city" => "Novi Sad"]) ->toArray();

Slide 13

Slide 13 text

Automatska serijalizacija PHP class Event { public $title = "DaFED"; public $when = new \DateTime(); public $city = "Novi Sad"; } MongoDB { __pclass: BinData(...) title: "DaFED", when: UTCDateTime("2016-08-03"), city: "Novi Sad" }

Slide 14

Slide 14 text

Tips & Tricks ✘ Za razliku od PHP i MySQL, koristi striktne tipove (2 != "2") ✘ UTF-8 je jedini encoding

Slide 15

Slide 15 text

Kada koristiti MongoDB? ✘ Raznorodni podaci ✘ Prototyping ✘ Obrada eksternih podataka ✘ Logovanje

Slide 16

Slide 16 text

Kada ne koristiti? ✘ Podaci sa striktnom šemom ✘ Kada je akcenat na relacijama između podataka ✘ Puno agregiranja

Slide 17

Slide 17 text

Hvala na pažnji Pitanja? @nebkam