Instance mongodb

Un article sur mes notes de mise en place d’instance sous mongodb :

 

Instance mongodb :
======================================
I
3 methode de creation d’instance :
1* l’instance par defaut créer avec les packages yum sous linux et le fichier exe pour windowns
2* avec l’utilitaire mongod en specifiant le dbpath (racine de l’instance) le port d’ecoute et la log
de l’instance et utiliser l’option fork pour lancement en arriere plan
ex : mongod –port 27031 –dbpath=/u02/mondb/instance03/data –logpath=/u02/mondb/instance03/data/mongo_27031.log –fork
3* toujours avec l’utilitaire mongod en precisant le fichier de config
qui contiendra :
le port d’ecoute
le logpath + dbpath(racine de l’instance)

II arret et redemarrage :
pour une installation par defaut l’arret ce fait via les scripts d’installation present dans
/etc/init.d/mongod start[stop|restart|status]

Pour arreter une instance nommé
– il faut se connecter l’instance et :
mongo –port 27018
– use admin
– db.shutdownServer();

b) demarrage d’une instance
mongod –port 27031 –dbpath=/u02/mondb/instance03/data
–logpath=/u02/mondb/instance03/data/mongo_27031.log –fork

Les bases de données :

Pas de commande pour creer une base mais lorsqu’on crée une collection dans une base
celle-ci devient persistent.
exe: use mydb
premiere collection(table)
> use mydb
switched to db mydb
> personne = ({nom: « Doe »,prenom: »John »,age:17});
{ « nom » : « Doe », « prenom » : « John », « age » : 17 }
> db.stagiaires.save(personne);
WriteResult({ « nInserted » : 1 })
> show collections;
stagiaires

le script ci-dessus va créer 3 fichiers avec le nom de la base
mydb.0 :
mydb.1 : stock les enregistrements de la collection
mydb.ns : pour les espaces de noms

2- suppression d’une base
use <db_name>
db.runCommand({dropDatabase:1});
db.dropDatabase();

il ya une suppression automatique des fichiers de la base

A) stockage
Dans une environnement 32 bits (interdit en production)
Ne pas stocker plus de 2.5G de données
Deconseiller pour la production
le repertoire de stockage utilise la variable dbpath.

la taille d’un fichier est toujours le double du précedant 64-128-256-512 jusqu’a 2 G
les autres fichiers de la base mongodb allouera une taille de 2G

Les fichiers *ns par defaut font 16M qu’on peut modifier afin d’ajouter le nombre de fichier pour une base

 
Les outils mongoDB
———————————-
———————————-
mongod moteur de base:
* permet le demarrage et l arret d une instance
* permet dinitiliaser une nouvelle instance
mongo shell javascript :
* permet de se connecter a une instance

mongos controleur de sharding:

* redirecteur de requetes sur la bonne instance
* connecteur et gestion de la replication

outils import et export :

– mongoimport
– mongoexport
– mongodump
– mongorestore
– bsondump : export une base au format json

-mongofiles : permet de charger les fichiers au format –> pdf-doc
– mongostat: pour les stats
– mongosniff: pour generer les fichier tcpdump
– mongotop

B) Espace de nom namespace :
——————————-
chaque collection et index ont un espace de nom par default on a 2400 objet
possibilité d’augmenter la taille ainsi :

* arret de l’instance
1= mongod –port xxxx admin
2= db.shutdownServer();
3= mongod –port 27031 –nssize 32 –dbpath=/u02/mondb/instance03/data
–logpath=/u02/mondb/instance03/data/mongo_27031.log –fork
afin de mettre à niveau les anciens fichiers il faut lancer la commande de mise à niveau

db.repairDatabase();

C) Les documents :

1) les collections :
Equivalent des tables en SGBDR
Deux modes de créations:
* automatiquement lors d’une insertion
* via la commande db.createCollection(‘nom_collection’)

Les operations sur les collections

* lister
– show collections
– db.getCollectionNames();
– db.nomcollection.find().pretty(); voir le contenue d’une collection

* créer
– db.createCollection(‘nom_collection’)

de maniere implicite avec declaration de variable et appel de la methoe db.nomcolleion.save();

tuple = ({nom:’steve’,prenom : ‘beaugoss’})
db.personne.save(tuple);

*supprimer
-db.nomcollection.drop();
*inserer un documents
– db.nomcollection.insert({val: « val_1″,val2: »val_2 »});

D) Les documents :

Corrrespond à un enregistrement en relationnel
Deux modes d’insertion :
– db.nomcollection.insert();
– db.nomcollection.save(); si la collection n’existe pas il le creer ou mise a jour
– Drive php,ruby,java,python
chaque document créer contient un id_ unique qui est
automatique et indexer en cles primaire.

Le format :
Mongodb stocke les documents au format json/bson (binair json)
json=javascript object natation
avantage du format json

* format abstrait pour une representation simplifiee dans different langage
* independant du langage de programmation
* simple et complet pour la representation des objets
* bonne lisibilité de la syntaxe
* temps de traitement tres proche du format xml
* moins volumineux en terme de stockage
* pour javascript un document json represent un objet

Les types disponibles en json
string,number,object,array,true,false,null

{ personne = ({num:1017, nom: ‘choume’,adresse:{num:12,codepostal:94100,ville:’paris’},age:30,competence:[‘DBA’,’ADMIN’,’DEVELOPPEUR’],stagiaire:false,prime:null});
{

E) LE CRUD =CREATE READ UPDATE DELETE :
Mongodb ne realise que des opérations atomique pour chaque document

C=createCollection,
R=db.collection.find()
UPDATE=db.collection.update(query,update,option)
query= l’objet du filtre
update= quesce qu’on met a jour
option= boolean
les specifications pour update

$set(permet de mettre à jour un champ)
$unset(permet de supprimer un champ)
$incr(permet d’incrementer un champ)

exemple: modification de Martin en choumeni

UPDATE :
——–

> db.bios.find({_id:10}).pretty();
{
« _id » : 10,
« name » : {
« first » : « Martin »,
« last » : « Odersky »
},
« contribs » : [
« Scala »
]
}
> db.bios.find({year:2011}).pretty();
> db.bios.update({_id:10},{$set:{‘name.first’: »choumeni »}},false,true);
SUPPRIME:
———-
supprimer un champ de document

> db.bios.update({_id:10},{$unset:{‘name.prenom’:1}},false,true);
WriteResult({ « nMatched » : 1, « nUpserted » : 0, « nModified » : 1 })
>
>
>
> db.bios.find({_id:10}).pretty();
{
« _id » : 10,
« name » : {
« first » : « choumeni »,
« last » : « Odersky »
},
« contribs » : [
« Scala »
]
}

db

> db.bios.remove({first: « choumeni »});
WriteResult({ « nRemoved » : 1 })

db.bios.remove({}) // supprimer l’ensemble des documents de la collection

> > db.bios.find({_id:10}).pretty();

 

NB : si on specifier un champ qui n’existe par pour une modification alors il sera creer automatiquement avec les opts
false et true

Incremmenter une valeurdb.bios.update({_id:10},{$inc:{‘name.AGE’:32}},true,true);

*********************
*requette nosql :
*********************
db.bios.find(); affiche le contenue de la collection
db.bios.find().pretty();affiche detailler
db.bios.find().count(); compte le nbre de document dans la collection
db.bios.find().limit(2).pretty(); // afficher les deux premieres ligne
db.bios.find({nom: »choumeni »}); affcher le nom choumeni du document bios
db.bios.find({‘name.first’: »choumeni »}).pretty();

les operateurs :
***************

$gt=plus grand que :db.bios.find({_id: {$gt:3}}).pretty();
$gte=plus grand que ou egale
$lt=plus ptit
$lte=plus ptit ou egale
$ne=different de
$all=comporte toutes les valeurs listé
$in=comporte au moins une des valeurs listées
$exist=l’existant du valeur à true
/ /= chaine de caracter c’est equivalent au like en sql :db.bios.find({‘name.first’: {/Ja/}}).pretty();

affiche juste les colonnes d’un champ

db.bios.find({},{« contribs »: 1}).pretty();
———————————-modifier son prompt —–

> var host = db.serverStatus().host;
> var prompt = function () { return db+ »@ »+host+ »> « ;}

————charger d’une base a une autre avec la commande use

db.runCommand({buildinfo:1}); permet de voir les caracteristiques de l’instance et du serveur

«  » » » » » » » » » » » » » » » » » » » » » » » » »
commande system mongodb :
«  » » » » » » » » » » » » » » » » » » » » » » » » »
show dbs : liste des bases de l’instance
db : affiche la base courante

db.bios.update({first:’choumeni’,prenom:’steve’},{$inc {AGE:2}},true,true)

 

Post Comment

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *