Quand Redis? Quand MongoDB?
Ce que je veux, c'est pas une comparaison entre MongoDB et Redis. Je sais qu'ils sont différents; de la performance et de l'API est totalement différent.
Redis est très rapide, mais l'API est très "atomique". MongoDB consommera plus de ressources, mais l'API est très facile à utiliser, et je suis très heureux avec elle.
Ils sont à la fois génial, et je veux utiliser Redis dans le déploiement autant que je le peux, mais il est difficile de code. Je veux utiliser MongoDB en développement autant que je le peux, mais il a besoin d'une coûteuse machine.
Alors, que pensez-vous de l'utilisation de chacun d'eux? Quand pour prendre Redis? Quand pour prendre MongoDB?
Vous devez vous connecter pour publier un commentaire.
Je dirais, ça dépend de la sorte de l'équipe de développement vous et les besoins de votre application.
Par exemple, si vous avez besoin de beaucoup de interrogation, qui signifie surtout qu'il serait plus de travail pour votre développeurs d'utiliser le Redis, où vos données peuvent être stockées dans une variété de des structures spécialisées de données, adapté à chaque type d'objet pour l'efficacité. Dans MongoDB les mêmes requêtes peut être plus facile parce que la structure est plus cohérent à travers vos données. D'autre part, dans le Redis, vitesse pure de la réponse à ces requêtes, est la récompense pour le travail supplémentaire de faire face à la diversité des structures de vos données peuvent être stockées avec.
MongoDB offre la simplicité, beaucoup plus courte de la courbe d'apprentissage pour les développeurs traditionnels DB et SQL expérience. Cependant, Redis non traditionnels, approche nécessite plus d'effort pour apprendre, mais une plus grande souplesse.
Par exemple. Un cache couche peut probablement être mieux mis en œuvre dans le Redis. Pour plus d'schéma de mesure des données, MongoDB, c'est mieux. [Note: les deux MongoDB et Redis sont techniquement schemaless]
Si vous me demandez, mon choix personnel est Redis pour la plupart des besoins.
Enfin, j'espère que vous avez maintenant vu http://antirez.com/post/MongoDB-and-Redis.html
Je viens de remarquer que cette question est assez vieux. Néanmoins, je considère que les aspects suivants pour être intéressant d'ajouter:
Utiliser MongoDB si vous ne savez pas encore comment vous allez interroger vos données.
MongoDB est adapté pour des Hackathons, des startups ou chaque fois que vous ne savez pas comment vous allez interroger les données que vous avez inséré. MongoDB ne pas faire d'hypothèses sur votre schéma sous-jacent. Alors que MongoDB est schemaless et non relationnelles, cela ne signifie pas qu'il n'existe pas de schéma. Cela signifie simplement que votre schéma doit être défini dans votre application (par ex. à l'aide de la Mangouste). En outre, MongoDB est idéal pour le prototypage ou en essayant des choses. Sa performance n'est pas énorme et ne peut pas être comparé à Redis.
Utiliser Redis, afin d'accélérer la vitesse de votre application existante.
Redis peut être facilement intégré comme un Cache LRU. Il est très rare d'utiliser Redis autonome, système de base de données (certaines personnes préfèrent se référant à lui comme une "clé-valeur"-store). Des sites web comme Craigslist utilisation Redis à côté de leur base de données primaire. Antirez (développeur de Redis) a démontré à l'aide de Lamernews qu'il est en effet possible d'utiliser Redis que d'un seul système de base de données.
Redis ne pas faire d'hypothèses basées sur vos données.
Redis fournissant un ensemble de données utiles des structures (p. ex. Jeux, tables de hachage, les Listes), mais vous devez les définir explicitement la façon dont vous souhaitez stocker vos données. Pour le dire en un mot, MongoDB et Redis peut être utilisé pour réaliser des choses similaires. Redis est tout simplement plus rapide, mais n'est pas adapté pour le prototypage. C'est un cas d'utilisation où vous préfèrent généralement MongoDB. En outre, Redis est vraiment flexible. Le sous-jacentes des structures de données qu'il fournit sont les blocs de construction de haute performance des systèmes DB.
Lors de l'utilisation de Redis?
La mise en cache
La mise en cache à l'aide de MongoDB n'a tout simplement pas beaucoup de sens. Il serait trop lent.
Si vous avez assez de temps pour penser au sujet de votre base de données de conception.
Vous ne pouvez pas simplement jeter vos documents dans le Redis. Vous devez penser à la façon dont vous dans lequel vous souhaitez stocker et organiser vos données. Un exemple sont les hachages dans le Redis. Ils sont très différents de "traditionnel", les objets imbriqués, ce qui signifie que vous aurez à repenser la façon dont vous stockez des documents imbriqués. Une solution serait de stocker une référence à l'intérieur de la table de hachage à l'autre de hachage (quelque chose comme clé: [id de deuxième hash]). Une autre idée serait de les stocker sous forme de JSON, ce qui semble contre-intuitif pour la plupart des gens avec un *SQL-fond.
Si vous avez besoin d' vraiment de haute performance.
Battre la performance Redis offre est presque impossible. Imaginez-vous de la base de données à être aussi rapide que votre cache. C'est ce que l'on ressent à l'aide Redis comme un réel base de données.
Si vous n'avez pas de soins que beaucoup sur la mise à l'échelle.
De mise à l'échelle Redis n'est pas aussi difficile que cela utilisé pour être. Par exemple, vous pourriez utiliser un type de serveur proxy dans le but de répartir les données entre plusieurs Redis instances. La réplication maître-esclave n'est pas que compliqué, mais la distribution de vous les clés entre plusieurs Redis-instances qui doit être fait sur le site d'application (par exemple en utilisant une fonction de hachage, Modulo, etc.). Mise à l'échelle MongoDB par comparaison est beaucoup plus simple.
Lors de l'utilisation de MongoDB
De Prototypage, Des Startups, Des Hackathons
MongoDB est parfaitement adapté pour le prototypage rapide. Néanmoins, la performance n'est pas très bonne. Aussi garder à l'esprit que vous aurez plus de chances d'avoir à définir une sorte de schéma dans votre application.
Lorsque vous avez besoin de changer votre schéma rapidement.
Car il n'existe pas de schéma! Modifier les tables traditionnels, SGBD relationnel est douloureusement lent et coûteux. MongoDB permet de résoudre ce problème en ne faisant pas beaucoup d'hypothèses sur les données sous-jacentes. Néanmoins, il essaie d'optimiser autant que possible, sans vous obliger à définir un schéma.
TL;DR
- Utilisation de Redis si la performance est importante et vous êtes prêt à passer du temps à l'optimisation et l'organisation de vos données.
- Utiliser MongoDB si vous avez besoin de construire un prototype sans trop se préoccuper de votre base de données.
Pour en savoir plus:
Redis. Disons que vous avez écrit sur un site en php; pour quelque raison que ce soit, il devient populaire, et il est en avance sur son temps ou a porno sur elle. Vous vous rendez compte de php est tellement ridiculement lent, "je vais perdre mes fans, tout simplement parce qu'ils n'auront pas à attendre 10 secondes pour qu'une page." Vous avez une soudaine prise de conscience qu'une page web a une constante url (il ne change jamais, whoa), une clé primaire si vous voulez, et puis vous vous souvenez que la mémoire est rapide alors que le disque est lent et php est encore plus lente. 🙁 Ensuite, vous de la mode un mécanisme de stockage à l'aide de la mémoire et de cette URL que vous appelez une "clé", tandis que le contenu des pages web, vous décidez d'appeler la "valeur". C'est tout ce que vous avez - clés et le contenu. Vous l'appelez "mème cache." Vous comme Richard Dawkins, parce qu'il est génial. Vous le cache de votre code html comme les écureuils cache leurs écrous. Vous n'avez pas besoin de réécrire votre merde de code php. Vous êtes heureux. Alors vous voyez que d'autres l'ont fait, mais vous choisissez Redis parce que l'autre a confusion des images de chats, certains avec des crocs.
Mongo. Vous avez écrit un site. Diable vous avez écrit beaucoup, et dans n'importe quelle langue. Vous vous rendez compte que beaucoup de temps est consacré à la rédaction de ces puant SQL clauses. Vous n'êtes pas administrateur, mais vous y êtes, écrit stupide sql... et pas seulement un, mais à flipper un peu partout. "sélectionnez cette option, sélectionnez". Mais, en particulier, vous souvenez-vous de l'irritant clause where. Où nom est synonyme de "thornton" et le film est égal à "bad santa." Urgh. Vous pensez, "pourquoi ne le faites pas ces administrateurs de bases de données juste faire leur travail et de me donner quelques procédures stockées?" Ensuite, vous oubliez un peu mineur domaine de la middlename et alors vous devez supprimer la table, l'exportation de tous les 10G de gros volumes de données et créer un autre avec ce nouveau domaine, et importer les données, et que se passe 10 fois au cours des 14 prochains jours, comme vous le garder sur le souvenir de la merde comme formule de salutation, de titre, de plus l'ajout d'une clé étrangère avec les adresses. Ensuite vous à la figure que le nom devrait être lastName. Près d'un changement un jour. Ensuite, vous dites darnit. J'ai à écrire un site web/système, jamais l'esprit ce modèle de données bs. Si vous google, "je déteste écrire SQL, s'il vous plaît pas de SQL, de le faire arrêter", mais jusqu'éclate "nosql" et puis vous avez lu quelques trucs et il affirme qu'il décharges de données sans schéma. Vous vous souvenez la semaine dernière fiasco de déposer plus de tableaux et de sourire. Ensuite, vous choisissez mongo parce que certains gros joueurs comme "airbud' apt location de site utilise. Doux. Plus de données le modèle de changements parce que vous avez un modèle que vous venez de changer.
You don't need to rewrite your crap php code?
, comment est-k-v magasin résout ce? 🙂Peut-être que cette ressource est utile d'aider à vous décider entre les deux.
Il aborde également plusieurs autres bases de données NoSQL, et propose une courte liste des caractéristiques, avec un "ce que je voudrais l'utiliser pour" explication pour chacun d'eux.
http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis
Difficile de répondre à cette question - comme avec la plupart des solutions de technologie, cela dépend vraiment de votre situation et puisque vous n'avez pas décrit le problème que vous essayez de résoudre, comment peut-on proposer une solution?
Vous avez besoin de tester les deux pour voir lequel d'entre eux satisfait votre besoins.
Avec cela dit, MongoDB ne nécessite pas de matériel coûteux. Comme toute autre solution de base de données, cela fonctionne mieux avec le plus de CPU et de mémoire, mais n'est certainement pas une exigence, surtout pour le début des fins de développement.
Redis est un dans la mémoire banque de données, qui peut persistent, c'est l'état de disque (afin de permettre la récupération après un redémarrage). Cependant, étant une banque de données en mémoire signifie que la taille de la banque de données (sur un seul nœud) ne peut dépasser le total de l'espace mémoire sur le système physique (RAM + swap de l'espace). En réalité, il sera beaucoup moins que cela, comme le Redis c'est le partage de l'espace avec de nombreux autres processus sur le système, et si il épuise le système de l'espace mémoire, il risque d'être tué par le système d'exploitation.
Mongo est un sur disque banque de données, qui est le plus efficace quand il est jeu de travail s'inscrit dans la mémoire RAM physique (comme tous les logiciels). Étant un disque de base de données, il n'existe pas de limites intrinsèques de la taille d'une base de données Mongo, cependant les options de configuration, l'espace disque disponible, et d'autres questions peut dire que les bases de données de tailles delà d'une certaine limite peut devenir difficile ou inefficace.
À la fois et Redis Mongo peut être mise en cluster de haute disponibilité, sauvegarde et l'augmentation de la taille globale de la banque de données.
Toutes les réponses (au moment d'écrire ces lignes) supposons que chaque de Redis, MongoDB, et peut-être une base SQL de base de données relationnelle sont essentiellement le même outil: "banque de données". Ils ne considèrent pas des modèles de données à tous.
MongoDB: Données Complexes
MongoDB est une banque de document. Pour comparer avec un SQL-driven relationnel de la base de données: bases de données relationnelles simplifier indexées CSV fichiers, chaque fichier étant un tableau; document de magasins de simplifier indexées JSON fichiers, chaque fichier étant un document, avec plusieurs fichiers regroupés.
Des fichiers JSON ont une structure similaire à XML et les fichiers YAML, et les dictionnaires comme en Python, alors, pensez à vos données dans une sorte de hiérarchie. Lors de l'indexation, la structure est la clé: Un document contient les clés nommées, qui contiennent d'autres documents, des tableaux, ou des valeurs scalaires. Examiner le document ci-dessous.
Le document ci-dessus a une clé,
PhoneNumber.Mobile
, qui a de la valeur555 634-5789
. Vous pouvez rechercher à travers une collection de documents où la clé,PhoneNumber.Mobile
, a de la valeur; ils sont indexés.Il a aussi un tableau de
Accounts
qui détiennent plusieurs indices. Il est possible de requête pour un document oùAccounts
contient exactement certains sous-ensemble de valeurs, tous de certains sous-ensemble de valeurs, ou tout de certains sous-ensembles de valeurs. Cela signifie que vous pouvez rechercher pourAccounts = ["379-1111", "379-2574"]
et ne pas trouver ci-dessus; vous pouvez rechercherAccounts includes ["379-1111"]
et trouver le document ci-dessus; et vous pouvez rechercherAccounts includes any of ["974-3785","414-6731"]
et de trouver ce qui précède et tout ce document renferme le compte "974-3785", le cas échéant.Documents d'aller aussi profond que vous le souhaitez.
PhoneNumber.Mobile
pourrait contenir un tableau, ou même un sous-document (PhoneNumber.Mobile.Work
etPhoneNumber.Mobile.Personal
). Si vos données sont très structurées, les documents sont un grand pas en place de bases de données relationnelles.Si vos données est essentiellement plat, relationnelle, et rigidement structurée, vous êtes mieux avec une base de données relationnelle. Encore une fois, la grande enseigne est de savoir si vos modèles de données le mieux à un de la collection de l'interdépendance des fichiers CSV ou une collection de XML/JSON/fichiers YAML.
Pour la plupart des projets, vous aurez à faire des compromis, accepter un mineur de travail autour de quelques petites zones où SQL ou d'un Document Magasins ne correspondent pas; pour certains grands projets complexes, le stockage d'un large éventail de données (nombre de colonnes; les lignes sont hors de propos), il serait judicieux de stocker des données dans un modèle et d'autres données dans un autre modèle. Facebook utilise SQL et un graphique de la base de données (où les données sont placées dans des nœuds, et les nœuds sont connectés à d'autres nœuds); Craigslist pour utiliser le MySQL et MongoDB, mais avait été à la recherche de déménagement entièrement sur MongoDB. Ce sont des endroits où la durée et la relation de ces données fait l'objet d'importants handicaps en cas de mise sous un modèle.
Redis: Clé-Valeur
Redis est, plus fondamentalement, un key-value store. Redis permet de donner une touche et de rechercher une valeur unique. Redis lui-même pouvez stocker des chaînes de caractères, les listes, les tables de hachage, et quelques autres choses; toutefois, il ne semble par nom.
Invalidation du Cache est l'une des sciences de l'informatique dur de problèmes; l'autre est nommant les choses. Cela signifie que vous allez utiliser Redis quand vous voulez éviter des centaines de l'excès de look-ups à un back-end, mais vous devez savoir quand vous avez besoin d'un nouveau look-up.
Le cas le plus évident de l'invalidation est mise à jour sur l'écriture: si vous lisez
user:Simon:lingots = NOTFOUND
, vous pourriezSELECT Lingots FROM Store s INNER JOIN UserProfile u ON s.UserID = u.UserID WHERE u.Username = Simon
et stocker le résultat,100
, commeSET user:Simon:lingots = 100
. Puis, quand vous récompense Simon 5 lingots, vous avez bien luuser:Simon:lingots = 100
,SET user:Simon:lingots = 105
, etUPDATE Store s INNER JOIN UserProfile u ON s.UserID = u.UserID SET s.Lingots = 105 WHERE u.Username = Simon
. Vous avez maintenant 105 dans votre base de données et dans le Redis, et peut obteniruser:Simon:lingots
sans interroger la base de données.Le deuxième cas est la mise à jour des informations dépendantes. Disons que vous générer des morceaux d'une page et cache leur sortie. L'en-tête montre l'expérience du joueur, le niveau et la quantité de l'argent; le Profil du joueur page a un bloc qui affiche les statistiques; et ainsi de suite. Le joueur gagne de l'expérience. Eh bien, maintenant vous avez plusieurs
templates:Header:Simon
,templates:StatsBox:Simon
,templates:GrowthGraph:Simon
, et ainsi de suite les domaines où vous avez mis en cache de la sortie d'une demi-douzaine de requêtes de base de données, courir à travers un moteur de template. Normalement, lors de l'affichage de ces pages, vous dites:Parce que vous venez de mettre à jour les résultats de
GetStatsFromDatabase("Simon")
, vous devez déposertemplates:*:Simon
de votre clé-valeur du cache. Lorsque vous essayez d'afficher l'un de ces modèles, votre demande de désabonnement à l'écart de l'extraction de données à partir de votre base de données (PostgreSQL, MongoDB) et de l'insérer dans votre modèle; puis il va stocker le résultat dans le Redis et, espérons-le, pas la peine de faire des requêtes de base de données et les modèles de rendu de la prochaine affiche de ce bloc de sortie.Redis vous permet également de faire de l'éditeur-abonnez-vous files d'attente de messages et de ces. C'est un autre sujet entièrement. Le Point ici est Redis est une valeur-clé de cache, qui diffère d'une base de données relationnelle ou une banque de document.
Conclusion
Choisissez vos outils en fonction de vos besoins. Le plus grand besoin est habituellement un modèle de données, comme qui détermine le degré de complexité et le risque d'erreur de votre code. Des applications spécialisées, va s'appuyer sur les performances, les endroits où vous écrire tout dans un mélange de C et de l'Assemblée; la plupart des applications sera juste la poignée de la généralisation d'un cas et l'utilisation d'un système de cache comme le Redis ou Memcached, ce qui est beaucoup plus rapide qu'une haute performance de base de données SQL ou une banque de document.
Et vous devriez ne pas utiliser si vous avez beaucoup de RAM. MongoDB et Redis venir pour le prix d'un outil d'usage général. Cet introduire un tas de frais généraux.
Il y a l'adage qui dit Redis est 10 fois plus rapide que Mongo. Qui pourrait ne pas être vrai. MongoDB (si je me souviens bien) a revendiqué pour battre memcache pour le stockage et la mise en cache des documents aussi longtemps que les configurations de mémoire sont les mêmes.
De toute façon. Redis bon, MongoDB est bon. Si vous vous souciez de sous-structures et la nécessité d'agrégation aller pour MongoDB. Si le stockage des clés et des valeurs est votre préoccupation principale son tout sur le Redis. (ou toute autre valeur de la clé de magasin).
MongoDB et Redis sont les deux bases de données non relationnelles, mais ils sont de différentes catégories.
Redis est une Clé/Valeur de la base de données, et c'est à l'aide de stockage En mémoire ce qui le rend super rapide. C'est un bon candidat pour la mise en cache des trucs et de stockage temporaire des données(dans la mémoire) et que la plupart des plates-formes cloud (comme Azure,AWS) le supporte, c'est l'utilisation de la mémoire est extensible.Mais si vous allez l'utiliser sur vos machines avec des ressources limitées, c'est l'utilisation de la mémoire.
MongoDB sur l'autre main, est un document de la base de données. C'est une bonne option pour garder les grands textes, images, vidéos, etc, et presque tout ce que vous faites avec les bases de données à l'exception des transactions.Par exemple, si vous voulez développer un blog ou un réseau social, MongoDB est un bon choix. Il est évolutif avec l'échelle de stratégie. Il utilise le disque comme support de stockage, de sorte que les données seraient conservées.
Si votre projet de budget vous permet d'avoir assez de mémoire RAM sur votre environnement - réponse est le Redis. En particulier la prise en compte des nouvelles Redis 3.2 avec les fonctionnalités de cluster.