Quand utiliser MongoDB

J’écris une application qui n’a pas nécessairement besoin de capacités de mise à l’échelle car elle ne collectera pas de grandes quantités de données au début. (Cependant, si j’ai de la chance, je pourrais potentiellement prendre la route.)

Je vais utiliser mon serveur Web et ma firebase database sur la même boîte (pour le moment).

Cela étant dit, je recherche la performance et l’efficacité.

La partie principale de mon application va charger des articles de blog. Utiliser un SGBDR (MySQL) Je ferai 6 requêtes (2 des requêtes étant jointes), juste pour charger une seule page d’article de blog.

select blog select blog_album select blog_tags select blog_notes select blog_comments (join with users) select blog_author_participants (join with users) 

Cependant, avec MongoDB je peux dé-normaliser et aplatir 6 tables en seulement 2 tables / collections et minimiser mes requêtes à potentiellement une seule requête,

 users blogs ->blog_album ->blog_tags ->blog_notes ->blog_comments ->blog_author_participants 

Maintenant, avec le schéma MongoDB, il y aura des redondances de données. Cependant, l’espace disque dur est moins cher que celui des CPU / serveurs.

1.) Serait-ce un bon scénario pour utiliser MongoDB?

2.) Est-ce que vous profitez uniquement des performances en utilisant MongoDB lorsque vous effectuez une mise à l’échelle au-delà d’un seul serveur?

3.) Y at-il des risques de durabilité en utilisant MongoDB? J’entends dire qu’il y a un risque de perte de données lors de l’exécution d’insertions – car les insertions sont écrites dans la mémoire en premier, puis dans la firebase database.

4.) Est-ce que cela devrait m’empêcher d’utiliser MongoDB en production?

Cependant, avec MongoDB je peux dé-normaliser et aplatir 6 tables en seulement 2 tables / collections et minimiser mes requêtes à une seule requête

Mais vous pouvez facilement interroger MySQL sur 6 tables d’informations relatives à un seul article de blog avec une seule instruction SQL correctement conçue.

Cependant, l’espace disque est moins cher que celui des CPU / serveurs.

Si les performances et la mise à l’échelle sont une priorité, vous devez vous préoccuper d’avoir assez de mémoire vive pour tout ranger dans la mémoire principale et suffisamment de cœurs de processeur pour exécuter les requêtes. Une masortingce RAID 10 de niveau professionnel est une exigence, ne vous méprenez pas, mais dès que votre logiciel de firebase database (MongoDB ou MySQL) doit parsingr un index qui ne peut pas entrer dans la mémoire principale, vous serez dans un monde de douleur en supposant une grande firebase database active. 🙂

J’aime MongoDB, mais sa grande force est la carte / réduction et son orientation vers les documents. Vous n’avez besoin d’aucune de ces fonctionnalités. MySQL a fait ses preuves dans les déploiements à grande échelle et supporte le partitionnement (mais je dirais que votre firebase database devrait être de l’ordre de 50-100 Go avant de pouvoir réaliser un gain substantiel en partitionnant un serveur unique avec une sauvegarde passive). tonnes (64 Go +) de RAM. Je dirais également que si la performance est vraiment une préoccupation alors MySQL serait préférable car vous auriez le contrôle suprême sur vos index.

Cela ne veut pas dire que MongoDB n’est pas très performant, mais sa place n’est probablement pas au service des blogs. Votre souci avec les encarts est également valable. MongoDB n’est pas un système ACID . Transactions Google dans les deux systèmes et comparez.

Vous utiliseriez MongoDB lorsque vous avez un cas d’utilisation correspondant à ses forces.

Avez-vous besoin d’un magasin de documents sans schéma? Non, vous avez un schéma stable.

Avez-vous besoin d’un partitionnement automatique? Non, vous n’avez pas besoin de données extraordinaires ni de budget pour le matériel à échelle horizontale.

Avez-vous besoin d’une carte / réduire le traitement des données? Pas pour quelque chose comme un blog.

Alors pourquoi envisagez-vous même cela?

Voici une bonne explication: http://mod.erni.st/nosql-if-only-it-was-that-easy/

Le dernier paragraphe le résume:

Comment vais-je construire ma prochaine application? Probablement Postgres. Vais-je utiliser NoSQL? Peut être. Je pourrais aussi utiliser Hadoop et Hive. Je peux tout garder dans des fichiers plats. Peut-être que je vais commencer à pirater Maglev. Je vais utiliser ce qui est le mieux pour le travail. Si j’ai besoin de rapports, je n’utiliserai aucun NoSQL. Si j’ai besoin de la mise en cache, j’utiliserai probablement Tokyo Tyrant. Si j’ai besoin d’ACIDity, je n’utiliserai pas NoSQL. Si j’ai besoin d’une tonne de jetons, je vais utiliser Redis. Si j’ai besoin de transactions, je vais utiliser Postgres. Si j’ai une tonne d’un seul type de documents, je vais probablement utiliser Mongo. Si je dois écrire 1 milliard d’objects par jour, j’utiliserais probablement Voldemort. Si j’ai besoin d’une recherche en texte intégral, j’utiliserais probablement Solr. Si j’ai besoin d’une recherche en texte intégral des données volatiles, j’utiliserais probablement Sphinx.

NoSQL vs RDBMS: pommes et oranges?

Je vous conseille de lire un peu sur ce qu’est NoSQL et ce qu’il fait avant de décider si vous pouvez l’utiliser. Vous ne pouvez pas prendre une firebase database normale et la transformer en une chose NoSQL comme ça. La façon dont vous travaillez avec les données est complètement différente.

NoSQL a définitivement ses utilisations. Mais ce n’est certainement pas la solution pour tout. Le principal avantage de NoSQL est le modèle de données facilement modifiable.

Avantages de l’utilisation de mongodb (selon Moshe Kaplan publié dans l’ article de dzone )

  1. Conception sans schéma
  2. Évolutivité dans la gestion des octets de données Tera
  3. Réplica rapideSet avec fonctionnalité de haute disponibilité
  4. Le sharding permet une croissance linéaire et progressive sans dépassement de budget
  5. Supporte une charge d’écriture élevée
  6. Utilisation de la localité Data pour le traitement des requêtes

MongoDB répond aux exigences de Consistency et de Partitioning dans la théorie de la PAC (cohérence, disponibilité et partitionnement)

Questions SE connexes:

Quels sont les avantages d’utiliser une firebase database sans schéma comme MongoDB par rapport à une firebase database relationnelle?

Quand à Redis? Quand MongoDB?