Installer MongoDB sur sa raspberry pi

Installer MongoDB sur sa Raspberry Pi

Mis à jour le 15 octobre 2014 - 21 Commentaires -

Après quelques tutoriels plus orientés autour de la partie physique du Raspberry Pi, nous voici de retour sur un article traitant de nouveau de la partie logicielle du Raspberry Pi.

En effet, aujourd’hui c’est pour un tutoriel portant sur les bases de données que nous nous retrouvons.

Nous vous avions déjà parlé d’une base de données alternative au traditionnel MySQL, dans notre article sur l’installation de MariaDB. Cependant, si MariaDB est un système différent de MySQL, il reste néanmoins un système de type Structured Query Language, c’est-à-dire un système de base de données orienté autour du concept de relations. Cette fois-ci, nous allons vous faire découvrir un système radicalement différent, avec l’installation de MongoDB sur votre Raspberry Pi.

Dans un premier temps nous verrons ensemble ce qu’est MongoDB, pourquoi il a été créé. Dans un second temps, nous nous pencherons sur ses avantages et inconvénients par rapport à MySQL ou MariaDB. Enfin, nous verrons ensemble comment installer MongoDB sur votre Raspberry Pi.

MongoDB, c’est quoi ?

Avant tout MongoDB c’est un système de base de données. C’est-à-dire un système dédié à l’agrégation et au stockage d’informations.

Là où l’affaire se complique, c’est qu’il ne s’agit pas d’un système de base de données que l’on pourrait appeler traditionnel, ou, pour être plus technique, un système dit « relationnel », ou les informations sont stockées dans des tables de formes fixes, et destinées à être mises en relations par le système lui-même au travers des requêtes des utilisateurs.

MongoDB, c’est un (sans doute le plus connu) système NOSQL. Et la première chose que vous devez savoir, c’est que c’est un système « NO », et pas « No ». La précision n’est pas très claire formulée ainsi, mais elle est réellement importante. D’abord parce qu’elle vous permettra de jouer les sales trolls, ensuite parce qu’il s’agit d’une erreur fréquemment commise, et qui change quelque peu l’idée même du système NOSQL.

Mais alors, « NO » et pas « No », ça signifie quoi ? La différence est (vous vous en doutez) dans la majuscule. En effet, le préfixe « NO » ajouté à l’acronyme SQL ne signifie pas « No » (« Non » en version française), mais bien « Not Only » (« Pas Seulement » en français).

Un système NOSQL n’est donc pas un système qui n’est pas SQL, mais bien un système qui n’est pas seulement SQL.

Maintenant que ce petit point a été évoqué, la vraie question reste en suspend.

Le NOSQL, c’est quoi, et pourquoi je l’installerai sur ma Raspberry Pi ?

Le NOSQL ?

Le NOSQL, comme nous l’avons rapidement évoqué, c’est un type différent de base de données, qui a été créé pour répondre à des problématiques différentes (nouvelles), pour lesquelles les bases de données de données SQL n’étaient pas adaptées.

Les bases NOSQL ont vu le jour après l’émergence de ce que l’on nomme le « Big Data », c’est-à-dire le regroupement de très grandes quantités de données diverses, présentant des rapports relativement faibles. Parmi les systèmes de bases NOSQL les plus connus, on peut nommer Cassandra, utilisé par Facebook, CouchDB de Apache, et bien entendu MongoDB.

Toutes ces bases ont été créées pour répondre à peu près aux mêmes problématiques, à savoir traiter ces grandes quantités d’informations présentant peu de points de liaison. Afin de traiter au mieux ces problématiques, ces bases stockent des données et permettent des requêtes sans mécanismes très poussés de liaisons, comme c’est par exemple le cas avec MySQL. En contrepartie, les systèmes NOSQL sont très rapides, et permettent ainsi le traitement de ces grandes quantités d’informations.

Pourquoi utiliser MongoDB sur votre Raspberry Pi ?

Soyons honnête, ce ne sera probablement pas pour optimiser la vitesse de votre Raspberry Pi. Bien sûr, vous pouvez utiliser MongoDB afin d’améliorer les performances de vos bases. Mais si votre projet en vient réellement à nécessiter MongoDB pour être viable, alors c’est qu’il ne sera plus à même de tourner sur une simple Raspberry Pi, mais qu’il lui faudra bel et bien un (ou plutôt dix) serveurs.

En revanche, vous pouvez avoir intérêt à installer MongoDB sur votre Raspberry Pi pour de nombreuses autres raisons.

Tout d’abord, vous pouvez vous trouver dans la situation où vous avez un projet qui ne nécessite pas obligatoirement MongoDB, mais qui n’aura jamais aucun intérêt à utiliser une base SQL. Par conséquent, puisque MongoDB est plus rapide, il est logique de l’utiliser lui plutôt qu’un système SQL.

Autre possibilité, vous devez travailler sur un projet qui à terme brassera tellement de données que vous aurez besoin d’un système MongoDB. Mais dans le cadre du développement et des tests, vous utiliser votre Raspberry Pi, et vous avez donc besoin d’y installer un système MongoDB.

Enfin, dernière (grande) possibilité, vous avez envie d’essayer (ou vous connaissez déjà et appréciez) MongoDB. Parce-que c’est simplement différent, et qu’il est toujours intéressant d’acquérir de nouvelles compétences.

Dans tous les cas une chose est sûre, MongoDB monte, le NoSQL monte, et savoir employer ces outils est un véritable plus dans votre cursus.

Penchons-nous maintenant un peu plus en avant sur MongoDB, et voyons un petit peu plus en détail son histoire et son fonctionnement global.

MongoDB, son histoire

MongoDB est le fruit du travail de la société 10gen, qui travaille lors de la création de MongoDB autour du cloud computing. Le nom MongoDB est dérivé de l’anglais « Humongous », « Énorme ».

MongoDB a été créé en 2007, et est viable de façon stable depuis 2010. MongoDB est distribué sous licence AGPL (GNU Affero General Public License), qui est un dérivé de la licence GPL bien connue. MongoDB est écrit en C++.

Aujourd’hui encore MongoDB est développé par 10gen, et bénéficie des avantages de logiciels libres en termes de développement.

MongoDB ça marche comment ?

MongoDB est un système de base de données orienté document, hautement scalable, sans schéma prédéfini de données. Devant autant de termes techniques, une explication semble s’imposer. Voyons donc ce que signifie ces différentes caractéristiques.

Un système orienté document

Un système orienté objet est un système de base de données qui ne s’oriente plus sur les relations entre des tables, mais plutôt sur le stockage d’objets indépendants et bénéficiant de leur propre structure.

Dans le cadre de MongoDB, les documents sont stockés sous forme BSON, qui est un dérivé du format JSON.

De plus, si la base de données ne permet pas de jointures, ou d’opérations complexes comme les systèmes SQL, il est possible d’effectuer les opérations complexes via l’utilisation de code JavaScript.

Un système hautement scalable

Cela signifie que le système peu facilement être mis à l’échelle, le plus souvent afin de s’adapter à une augmentation (plus ou moins forte) de la quantité de données à gérer.

En clair, il est facile de répartir la charge de calcul, le stockage, etc., de MongoDB sur plusieurs machines. Cela signifie donc que si demain le nombre de vos utilisateurs augmente à un point tel qu’une seule machine ne suffit plus à traiter leurs demandes, il vous sera très facile de rajouter une ou plusieurs machines, et de répartir les traitements MongoDB entre elles, sans modifier votre code.

Un système sans schéma prédéfini de données

C’est sans doute le point qui vous semblera le plus étonnant si vous venez des systèmes SQL traditionnels.

Un système sans schéma prédéfini de données est un système où une base (ou dans le cadre de MongoDB une collection) peut contenir des enregistrements (ou dans le cadre de MongoDB des documents) de formes différentes, non seulement dans leurs contenus, mais également dans leurs champs.

Cela signifie qu’une base de données avec un schéma de données prédéfini contiendra dans une même table des enregistrements dont les champs auront des contenus variables, mais des formes et des colonnes identiques. À l’inverse, une base de données sans schéma de données prédéfini pourra contenir au sein d’une même table des enregistrements dont le nombre, la forme, ou même la nomenclature, des colonnes peuvent varier.

Pour prendre un exemple caricatural, dans l’absolu une table SQL « Utilisateurs » ne pourra contenir que des lignes utilisateurs, alors qu’une table MongoDB « Utilisateurs » pourra contenir des lignes utilisateurs, mais aussi des lignes « Messages ». Il est important de comprendre qu’il ne s’agit pas là d’un comportement à adopter. Une telle chose serait absurde, et l’absurde n’est que rarement un bon concept de développement. Cependant, il s’agit là d’un comportement qui est techniquement possible.

En général, ce type de comportement signifie surtout que vous pourrez vous retrouver dans le cadre de MongoDB avec des lignes « Utilisateurs » possédant un champ « Email de Récupération », et des lignes « Utilisateurs » ne possédant pas ce champ. Là ou dans un système SQL vous n’auriez eu que des lignes « Utilisateurs » avec un champ « Email de Récupération », mais qui aurait parfois été rempli à NULL.

Par ailleurs, des clefs peuvent être ajoutées ou retirées à la volée, sans modification de la base.

Vous savez maintenant tout de MongoDB, et nous n’avons plus qu’à voir comment l’installer sur votre Raspberry Pi.

Installation de MongoDB sur la Raspberry Pi.

Pendant longtemps, MongoDB n’était pas disponible dans les dépôts officiels de Raspbian et son installation se révélée donc relativement compliquée.

Par chance, ce problème est aujourd’hui résolu et l’installation de MongoDB se fait en quelques lignes de commandes très simple.

Dans un premier temps, il faut mettre à jour la liste des paquets avec la commande suivante :

sudo apt-get update

Dans un second temps, il nous suffit de demander au gestionnaire de paquet l’installation de MongoDB. Pour cela, rien de plus simple, il vous suffit de lancer la commande suivante :

sudo apt-get install mongodb-server

Il ne vous reste plus qu’à vous laisser guider !

Une fois l’installation finie, vous pouvez accéder au client MongoDB avec la commande « mongo » !

C’est fini !

Voilà, vous avez maintenant un joli petit serveur MongoDB pour votre Raspberry Pi.

Comme d’habitude nous espérons que vous aurez apprécié ce tutoriel, et qu’il vous aura aidé dans votre utilisation de la Raspberry !

N’hésitez pas à allez faire un tour sur nos articles consacrés aux accessoires ou à la mise en place d’un serveur web !

Nous profitons de cet article comme du précédent pour vous rappeler que si vous souhaitez aider Raspbian France à se développer et à se diffuser, vous pouvez parler de nous autour de vous, et mettre un lien vers Raspbian France sur vos site, aussi bien dans vos partenaires que pour indiquer des ressources à vos visiteurs, ou ajouter des sources d’informations complémentaires à vos articles.

Partager
Newsletter
Auteur :
Raspbian France
Rejoignez la communauté Raspberry Pi
Un ordinateur à 35€ déjà vendu à 10 millions d'exemplaires
ACHETEZ LA NOUVELLE RASPBERRY PI 3
Tutoriels en rapport
Installer un media-center avec OSMC sur votre Raspberry Pi ! RaspiSMS 2.0, envoyer des SMS par internet avec la Raspberry Pi Bien choisir vos accessoires pour les Raspberry Pi 3 et 2 Envoyer, gérer et recevoir des SMS avec la Raspberry Pi Installer un serveur Minecraft sur votre Raspberry Pi !
21 commentaires
Besoin d'aide ? Vous la trouverez plus vite sur notre forum.
  1. Alystik dit :

    Merci pour ce tuto,

    Je suis resté coincé au moment de lancer /opt/mongo/bin/mongo avec le message d’erreur suivant :
    Couldn’t connect to server 127.0.0.1:27017

    En fouinant un peu sur Stackoverflow je suis tombé sur ce thread :
    http://stackoverflow.com/questions/12831939/couldnt-connect-to-server-127-0-0-127017

    Adapté à notre cas, ce qui a marché pour moi :
    Step 1: Remove lock file.
    sudo rm /var/lib/mongodb/mongod.lock

    Step 2: Repair mongod.
    mongod –repair

    Step 3: start mongod.
    sudo service mongod start

    Step 4: Check status of mongodb.
    sudo service mongod status

    Step 5: Start mongo console.
    /opt/mongo/bin/mongo

    1. Salut,
      merci à toi pour les infos, elles pourrons sans doutes aider d’autres personnes !

    2. cybernaboo dit :

      Très utile car j’ai eu le même problème et cela a fonctionné pour moi !

    3. tupaacs dit :

      Merci pour message, ca m’a ete d’une grande utilité.

    4. cchatel2000 dit :

      J’ai eu le même problème. Il manque apparemment, dans la description ci-dessus, la commande :
      sudo service mongod start

      pour que
      /opt/mongo/bin/mongo
      fonctionne la première fois.

  2. Florian0410 dit :

    Bonjour,
    j’ai récemment installé Mongodb en suivant ce tuto et celui-ci fonctionne bien mais je rencontre un problème qui me dérange.
    Lorsque j’ai besoin de redémarrer ma raspberry pi, je stop le service mongodb avec :
    #sudo service mongod stop
    puis je redémarre ma raspberry. Seulement au redémarrage lorsque j’essaie de de me reconnecter à ma bdd avec
    #/opt/mongo/bin/mongod
    je rencontre le problème suivant :

    /usr/lib/mongodb/mongod –help for help and startup options
    Sat Jun 25 09:38:51 MongoDB starting : pid=1782 port=27017 dbpath=/data/db/ 32-bit

    ** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data
    ** see http://blog.mongodb.org/post/137788967/32-bit-limitations

    Sat Jun 25 09:38:51 db version v1.6.3, pdfile version 4.5
    Sat Jun 25 09:38:51 git version: nogitversion
    Sat Jun 25 09:38:51 sys info: Linux vernadsky 2.6.24-27-server #1 SMP Fri Mar 12 01:45:06 UTC 2010 i686 BOOST_LIB_VERSION=1_42
    Sat Jun 25 09:38:51 [initandlisten] *** warning: spider monkey build without utf8 support. consider rebuilding with utf8 support
    Sat Jun 25 09:38:51 [initandlisten] waiting for connections on port 27017
    Sat Jun 25 09:38:51 [initandlisten] listen(): bind() failed errno:98 Address already in use for socket: 0.0.0.0:27017
    Sat Jun 25 09:38:51 [initandlisten] addr already in use
    Sat Jun 25 09:38:51 [initandlisten] now exiting
    Sat Jun 25 09:38:51 dbexit:

    Sat Jun 25 09:38:51 [initandlisten] shutdown: going to close listening sockets…
    Sat Jun 25 09:38:51 [initandlisten] shutdown: going to flush oplog…
    Sat Jun 25 09:38:51 [initandlisten] shutdown: going to close sockets…
    Sat Jun 25 09:38:51 [initandlisten] shutdown: waiting for fs preallocator…
    Sat Jun 25 09:38:51 [initandlisten] shutdown: closing all files…
    Sat Jun 25 09:38:51 closeAllFiles() finished

    Sat Jun 25 09:38:51 [initandlisten] shutdown: removing fs lock…
    Sat Jun 25 09:38:51 dbexit: really exiting now

    Je me demande donc si j’arrêtais bien correctement Mongodb car ce problème ne survient qu’après redémarrage.
    Je tiens à préciser que pour réparer mongodbje devais le supprimer en suivant les étapes de ce tuto en sens inverse avant de réinstaller mongodb.

    Merci d’avance pour vos réponses

    1. Florian0410 dit :

      Après vérification c’est après le redémarrage du service que je rencontre cette erreur.

    2. Florian0410 dit :

      Problème résolu,
      En fait je relançais un second service sans m’en rendre compte et créais un conflit avec l’autre service déjà lancé.

  3. bigbrownies dit :

    Bonjour,

    Merci pour le tuto. J’aurais aimé quelques précisions.
    Voilà , pour mon projet, j’ai besoin d’une raspberry pi.
    J’utilise Mysql pour le moment mais après avoir lu votre tuto je me pose la question suivante:
    J’entreprose des identifiants dans ma base. Ils peuvent être nombreux, jusqu’à 1 million mais sont de très faibles en occupation mémoire (1ko).
    Je dois rapidement visiter ma table pour y vérifier si l’id que je veux appartient bien à cette table. le nombre d’objets connectés ou de personnes connecté sur le serveur ne dépasse pas les 10.

    y a t il un grand changement si je passe de Mysql à mongodb ?

    Cd, bigbrownies

    1. Bonjour,
      MongoDB proposerait probablement de meilleures performances mais demanderait une refonte assez importante du code. Si tu as conçus correctement ton système de base de données, tu ne devrais pas rencontrer de problèmes de performances.
      Comment « visites-tu » ta table pour savoir si un id lui appartient ? La mise en place d’index notamment, si ce n’est pas encore fait, devrais très probablement augmenter les performances.

  4. Reyna1d dit :

    Superbe tuto. Merci pour tout, ca marche à merveille.
    Malheureusement pour moi, je développe sur Mac et je suis parti sur une version 3 de mongodb sans me rendre compte que je ne pourrais pas avoir cette version en prod sur mon Raspberry.
    j’aimerais donc savoir s’il existe une solution pour avoir une version plus récente de mondodb installable de façon aussi simple que celle-ci.
    J’utilise des fonction qui ne sont dispo qu’a partir de la 2.2.
    Merci d’avance.

    1. Bonjour,
      je pense qu’il faudra fouiller plus en avant pour compiler toi même MongoDB.

  5. François A dit :

    Bonjour,

    Je viens de lire avec intérêt ce tuto.
    J’ai la même interrogation que BigBrownies.

    Une de mes nombreuses framboises joue le rôle de router/dns/filtre/libpcap, mon idée est de loggué les consommations des postes de mon réseau local qui passent par mon router.
    Actuellement, c’est un MySQL qui stocke les log IP / IP avec un tx d’échantillonnage de 2 secondes ; la table des échantillons en deux semaines fait 1 million de records ; les perf sont plutôt bonnes et les stats récupérées avec les commandes select group by sont plutôt rapides : moins d’une seconde en moyenne mais avec une variance très fortes, effectivement toutes les 30 secondes ; le MySQL doit rééquilibrer ces arbres binaires d’index (j’imagine) et ma Framboise est sur les genoux !!!
    Ma question est :
    Est ce que MongoDB aura les mêmes capacités de calcul agrégatifs, est ce que l’insertion d’au maximum 20 records par seconde serait acceptable sur une Framboise 1b (nono core) ?
    Pour info j’ai essayé aussi sqlite et le problème est le même et les performances en calculs agrégatifs moins bonnes.
    Peut être dois je acheter une Framboise 4 cores ? mais c’est moins « sport »

    Mille merci d’avance
    François A

    1. Bonjour,
      les performances de MongoDB seraient peut-être légèrement supérieures, mais je ne pense pas que cela soit flagrant. Peut être vaudrait il mieux utiliser MariaDB que MySQL et voir si une meilleure gestion des index est possible.
      Néanmoins, nous ne sommes pas spécialistes des bases de données et peut être que certains pourront te donner de meilleures informations.

  6. vicor dit :

    j’ai suivi toutes les instructions ,

    voila l’output de la commande /opt/mongo/bin/mongo :

    MongoDB shell version: 2.1.1-pre-
    connecting to: test
    Thu Aug 13 11:43:25 Error: couldn’t connect to server 127.0.0.1:27017 src/mongo/shell/mongo.js:91
    exception: connect failed

    est ce que j’ai pas bien saisi quelque chose ?!!

    1. Salut,
      il faut probablement que tu démarres le serveur MongoDB.

  7. deep dit :

    Pour moi l’erreur de connexion a été résolu avec cette commande, qui lance le daemon de mongodb en background :

    mongod –fork –logpath /var/log/mongod.log

    En gros le serveur ne s’etait pas lancé

  8. mohamed dit :

    J’essayé avec cette méthode mais rien n’a pas changé. Quelqu’un peut donner un tutoriel pour l’installation de mongodb et merci

    1. Salut,
      lorsque tu lances le commande « apt install … » que te retourne la Pi ?

Partager
Inscription à la Newsletter
Inscrivez-vous à la Newsletter.
Vous avez aimé cet article ?
Inscrivez-vous et restez informé !