MongoDB – Partie 1
What the no-sql ?
Introduction
Introduction

PHPCR
MongoDB
MongoDB – Infos

MongoDB ("humongous")
10gen
2007 – start project
2009 – open source
C++
Licence : GNU AGPL v3.0 (drivers:...
Data

MongoDB

MySQL

SGDB
> databases
> collections
> documents

SGDB
> databases
> tables
> lignes

No structure
Dynamic...
Data

BSON = Binary JSON
Lightweight, traversable and UTF-8

{
FirstName:
Address:
Children:
{Name:
{Name:
{Name:
{Name:
]...
Key

_id: ObjectId
12 bits :
- 4 bits – Timestamp (Unix)
- 3 bits – ID machine
- 2 bits – ID process
- 3 bits – Count

}

...
Map reduce
Map : select process per document
Reduce : combining data
function mapFunction() {
emit(this.user_id, this.pric...
V8 JavaScript engine

ECMAscript
V8 JavaScript Engine
standardized JSON
strict mode
Installation (Debian) & shell
Installation

$ sudo apt-key adv --keyserver keyserver.ubuntu.com
--recv 7F0CEB10
$ echo 'deb http://downloadsdistro.mongo...
Installation

$ mongo
MongoDB shell version 2.4.9
connection to : test
> show databases
default 0.203125GB
test
0.203125GB...
MongoDB – Drivers
Client libraries
●
●
●
●
●
●
●
●
●
●
●
●
●

C
C++
C#
Go
Erlang
Java
JavaScript
Node.js
Perl
PHP
Python
R...
PHP - installation

$
$
$
$

sudo
sudo
sudo
sudo

apt-get update
apt-get install php5-dev
pecl install mongo
php5enmod mon...
Client PHP
PHP – classes & types

●

MongoClient

●

MongoId

●

MongoDB

●

MongoCode

●

MongoCollection

●

MongoDate

●

MongoCur...
PHP – examples

Create
<?php
$someDoc = [
'author'
'content'
'nbComment'
'dateCreated'
];

=>
=>
=>
=>

'ekino',
'mongod',...
PHP – examples

$ mongo
MongoDB shell version: 2.4.8
connecting to: test
> show databases
demoDb 0.203125GB
local 0.078125...
Installation

$ ls -lGh /var/lib/mongodb
drwxr-xr-x 2 mongodb 4,0K déc.
-rw------- 1 mongodb 64M déc.
-rw------- 1 mongodb...
PHP – examples

$ ls -lGh /var/lib/mongodb
-rw------- 1 mongodb 64M déc.
-rw------- 1 mongodb 128M déc.
-rw------- 1 mongo...
PHP – examples

Retrieve
<?php
$client = new MongoClient("mongodb://localhost/");
$database = $client->demoDb;
$collection...
PHP – examples

Update
<?php
$client = new MongoClient("mongodb://localhost/");
$database = $client->demoDb;
$collection =...
PHP – examples

Delete
<?php
$client = new MongoClient("mongodb://localhost/");
$database = $client->demoDb;
$collection =...
Administration
Package components

●

mongod : primary daemon process for the MongoDB system

●

mongos : routing service for MongoDB sha...
Replication
Sharding
Tools
Interface - metric
MMS - 10gen
Interface - GUI
Robomongo

https://github.com/paralect/robomongo
Conclusion
Intégration
Intégration

SQL et/ou NoSQL ?

Source : http://www.commitstrip.com/en/2012/04/10/what-do-you-mean-its-oversized/
Annexes
Pool-DBM :
PHP Library to create relationships between DBMS.
Work with Doctrine Library.
https://github.com/pokap/...
Prochain SlideShare
Chargement dans…5
×

MongoDB - Ekino PHP

9 449 vues

Publié le

Overview mongodb in application with PHP.

Sub-annexe:
http://www.ekino.com/
http://www.florentdenis.net/
https://github.com/pokap/pool-dbm

Publié dans : Technologie
  • Soyez le premier à commenter

MongoDB - Ekino PHP

  1. 1. MongoDB – Partie 1
  2. 2. What the no-sql ?
  3. 3. Introduction
  4. 4. Introduction PHPCR
  5. 5. MongoDB
  6. 6. MongoDB – Infos MongoDB ("humongous") 10gen 2007 – start project 2009 – open source C++ Licence : GNU AGPL v3.0 (drivers: Apache licence) Easy, scalability and Big DATA Geolocalisation
  7. 7. Data MongoDB MySQL SGDB > databases > collections > documents SGDB > databases > tables > lignes No structure Dynamic schema Structure Static schema
  8. 8. Data BSON = Binary JSON Lightweight, traversable and UTF-8 { FirstName: Address: Children: {Name: {Name: {Name: {Name: ] } "Jonathan", "15 Wanamassa Point Road", [ "Michael", Age: 10}, "Jennifer", Age: 8}, "Samantha", Age: 5}, "Elena", Age: 2}
  9. 9. Key _id: ObjectId 12 bits : - 4 bits – Timestamp (Unix) - 3 bits – ID machine - 2 bits – ID process - 3 bits – Count } Similar UUID Example : 52af1a617e0b18d9448b4567 (hexa) DBRefs - collection - _id - db (optional)
  10. 10. Map reduce Map : select process per document Reduce : combining data function mapFunction() { emit(this.user_id, this.price); } function reduceFunction(keyUserId, valuePrice) { return Array.sum(valuePrice); } db.runCommand({ mapReduce: 'my_collection', map: mapFunction, Reduce: reduceFunction, out: 'map_reduce_results_collection', query: { old_date: { $gt: new Date('17/08/2005') } } })
  11. 11. V8 JavaScript engine ECMAscript V8 JavaScript Engine standardized JSON strict mode
  12. 12. Installation (Debian) & shell
  13. 13. Installation $ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10 $ echo 'deb http://downloadsdistro.mongodb.org/repo/debian-sysvinit dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list $ sudo apt-get update $ sudo apt-get install mongodb-10gen $ sudo /etc/init.d/mongodb {status|start|stop|restart| reload|force-reload}
  14. 14. Installation $ mongo MongoDB shell version 2.4.9 connection to : test > show databases default 0.203125GB test 0.203125GB local 0.078125GB reseau 0.203125GB > use reseau switched to db reseau > show collections network system.indexes traffic > db.traffic.count() 8
  15. 15. MongoDB – Drivers Client libraries ● ● ● ● ● ● ● ● ● ● ● ● ● C C++ C# Go Erlang Java JavaScript Node.js Perl PHP Python Ruby Scala Community Supported Drivers ● ● ● ● ● ● ● ● ● ● ● ● ● ● ActionScript3 ColdFusion D Dart Delphi Groovy Lips Lua Objective C Ocaml Opa PowerShell R Smalltalk http://docs.mongodb.org/ecosystem/drivers/
  16. 16. PHP - installation $ $ $ $ sudo sudo sudo sudo apt-get update apt-get install php5-dev pecl install mongo php5enmod mongo
  17. 17. Client PHP
  18. 18. PHP – classes & types ● MongoClient ● MongoId ● MongoDB ● MongoCode ● MongoCollection ● MongoDate ● MongoCursor ● MongoRegex ● MongoBinData ● MongoInt32 ● MongoInt64 ● MongoDBRef ● MongoGridFS ● MongoMinKey ● MongoGridFSFile ● MongoMaxKey ● MongoGridFSCursor ● MongoTimestamp
  19. 19. PHP – examples Create <?php $someDoc = [ 'author' 'content' 'nbComment' 'dateCreated' ]; => => => => 'ekino', 'mongod', 5, new MongoDate() $client = new MongoClient("mongodb://localhost/"); $database = $client->demoDb; $collection = $database->demoCollection; $collection->insert($someDoc); echo (string) $someDoc['_id']; // 52af1a617e0b18d9448b4567
  20. 20. PHP – examples $ mongo MongoDB shell version: 2.4.8 connecting to: test > show databases demoDb 0.203125GB local 0.078125GB > use demoDb switched to db demoDb > db.demoCollection.find(); { "_id" : ObjectId("52af1a617e0b18d9448b4567"), "author" : "ekino", "content" : "mongod", "nbComment" : 5, "dateCreated" : ISODate("2013-12-16T15:21:05.212Z") } > exit Bye $ php -r 'var_dump(date("Y-m-d H:i:s", hexdec("52af1a61")));' string(19) "2013-12-16 16:21:05"
  21. 21. Installation $ ls -lGh /var/lib/mongodb drwxr-xr-x 2 mongodb 4,0K déc. -rw------- 1 mongodb 64M déc. -rw------- 1 mongodb 16M déc. -rwxr-xr-x 1 mongodb 5 déc. drwxr-xr-x 2 mongodb 4,0K déc. 16 16 16 16 16 16:21 10:10 10:10 10:10 16:21 journal local.0 local.ns mongod.lock _tmp
  22. 22. PHP – examples $ ls -lGh /var/lib/mongodb -rw------- 1 mongodb 64M déc. -rw------- 1 mongodb 128M déc. -rw------- 1 mongodb 16M déc. drwxr-xr-x 2 mongodb 4,0K déc. -rw------- 1 mongodb 64M déc. -rw------- 1 mongodb 16M déc. -rwxr-xr-x 1 mongodb 5 déc. drwxr-xr-x 2 mongodb 4,0K déc. 16 16 16 16 16 16 16 16 16:21 16:21 16:21 16:21 10:10 10:10 10:10 16:21 demoDb.0 demoDb.1 demoDb.ns journal local.0 local.ns mongod.lock _tmp
  23. 23. PHP – examples Retrieve <?php $client = new MongoClient("mongodb://localhost/"); $database = $client->demoDb; $collection = $database->demoCollection; $collection->findOne(['nbComment' => ['$gt' => 3]]; $cursor = $collection->find(); $cursor->count(); // number of documents $cursor = $cursor->sort(['author' => 1]); $cursor = $cursor->limit(10); foreach ($cursor as $demo) { // iterator ... }
  24. 24. PHP – examples Update <?php $client = new MongoClient("mongodb://localhost/"); $database = $client->demoDb; $collection = $database->demoCollection; $query = ["author" => "ekino"]; $newdata = [ '$set' => [ "keywords" => "excellent ta_vu" ] ]; $options = [ 'upsert' => true, 'multiple' => false, 'j' => false // or fsync ]; $collection->update($query, $newdata, $options);
  25. 25. PHP – examples Delete <?php $client = new MongoClient("mongodb://localhost/"); $database = $client->demoDb; $collection = $database->demoCollection; $options = ["justOne" => true, "j" => false]; $collection->remove(['author' => 'ekino'], $options);
  26. 26. Administration
  27. 27. Package components ● mongod : primary daemon process for the MongoDB system ● mongos : routing service for MongoDB shard ● mongo : interactive JavaScript shell interface ● mongodump : creating a binary export ● mongorestore : writes data from a binary database dump ● ● mongostat : provides a quick overview of the status similar vmstat mongoperf : check disk I/O performance independently of MongoDB
  28. 28. Replication
  29. 29. Sharding
  30. 30. Tools
  31. 31. Interface - metric MMS - 10gen
  32. 32. Interface - GUI Robomongo https://github.com/paralect/robomongo
  33. 33. Conclusion
  34. 34. Intégration
  35. 35. Intégration SQL et/ou NoSQL ? Source : http://www.commitstrip.com/en/2012/04/10/what-do-you-mean-its-oversized/
  36. 36. Annexes Pool-DBM : PHP Library to create relationships between DBMS. Work with Doctrine Library. https://github.com/pokap/pool-dbm Source images : http://askdba.org/weblog/images/technical/nosql http://www.generation-trafic.fr/wp-content/uploads/2012/07/geolocalisation.jpg http://www.kchodorow.com/blog/wp-content/uploads/2010/03/sharding.png http://www.commitstrip.com/en/2012/04/10/what-do-you-mean-its-oversized/ http://www.pixelboy.fr/wp-content/uploads/2011/11/Firefox1.png http://robomongo.org/ http://nyccto.files.wordpress.com/2011/03/mysql_to_mongodb.gif http://www.elektronique.fr/cours/porte-logique/images/porte-logique-et.png

×