Your SlideShare is downloading. ×
0
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/...
Upcoming SlideShare
Loading in...5
×

MongoDB - Ekino PHP

5,978

Published on

Overview mongodb in application with PHP.

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

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
5,978
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
15
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Qu&apos;est-ce que le no-sql ?
    Tout ce qui n&apos;est pas SQL
    Le no-sql a toujours existé
  • Clé-valeur
    Orienté columns
    Orienté document
  • Pas de transaction
    Terminologie :
    Table = Collection,
    Ligne = Document,
    Index = Index
    Collections de collections
    Mongo: ACID ? ~Atomic (update)~, cohérent, isolation, durable
  • Pas de schéma
    Donnée hétérogènes (éviter M coll)
    Atomicité par document
    Terminologie :
    Jointure = Données embarquées
  • Obligatoire
    Clé 12 bits
    4 – timestamp
    3 – id machine
    2 – id process
    3 – compteur
    Non brut visible en hexa 24 caractères
  • Donne une idée de l&apos;implémentation de mongo dans PHP
  • Pas besoin de createdAt avec l&apos;id
  • Upsert : insert if unexists
    Multiple : all for request
    J : false : force sync with disk, else journal
  • Groupe de process mongo maintiens les mêmes données (master/slave)
  • Process stockage de donnée entre plusieurs machine.
    Si une machine ne tiens pas la charge (I/O)
    Haute-disponibilité avec la réplication
  • Qu&apos;est-ce que le no-sql ?
    Tout ce qui n&apos;est pas SQL
    Le no-sql a toujours existé
  • Compatible : Mac, windows et Linux
  • - ne pas l&apos;utiliser juste pour le plaisir
    - pas adapté aux environnements transactionnels critiques
  • Transcript of "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
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×