50 votes

MongoDB sur le serveur EC2 ou AWS SimpleDB?

Quel est le scénario qui fait plus de sens que l'hôte de plusieurs instances EC2 avec MongoDB installé, ou bien plutôt d'utiliser la Amazon SimpleDB webservice?

Quand au fait d'avoir plusieurs instances EC2 avec MongoDB, j'ai le problème de la définition de l'instance par moi-même.

Lors de l'utilisation de SimpleDB j'ai le problème de verrouillage de moi Amazones structure de données de la droite?

Quelles sont les différences de développement? Ne devrais-je pas être en mesure de passer le DAO de mes couches de service, à écrire à MongoDB ou amazon SimpleDB?

58voto

sirmak Points 2437

SimpleDB a une certaine évolutivité des limites. Vous ne pouvez échelle par la fragmentation, et il a une latence plus élevée que mongodb ou cassandra, elle a un débit maximum et qu'il est à un prix plus élevé que les autres options. L'évolutivité est manuel (vous avez du fragment).

Si vous avez besoin d'une plus large d'options de requête et vous avez un fort taux de lecture et que vous ne disposez pas de beaucoup de données mongodb est mieux. Mais pour la durabilité, vous devez utiliser au moins 2 mongodb instances de serveur maître/esclave. Sinon, vous pouvez perdre la dernière minute de vos données. L'évolutivité est manuel. C'est beaucoup plus rapide que simpledb. Autosharding est mis en œuvre dans la version 1.6.

Cassandra a la faiblesse des options de requête, mais est aussi durable que postgresql. Il est aussi rapide que mongo et plus rapide sur une augmentation de la taille des données. Les opérations d'écriture sont plus rapides que les opérations de lecture sur cassandra. Il peut l'échelle automatiquement par le tir des instances ec2, mais vous devez modifier les fichiers de config un peu (si je me souviens bien). Si vous avez des téraoctets de données cassandra est votre meilleur pari. Pas besoin d'éclat de vos données, il a été conçu distribué à partir du 1er jour. Vous pouvez avoir un nombre quelconque de copies pour l'ensemble de vos données et si certains serveurs sont morts, il reviendra automatiquement les résultats en direct et de distribuer la mort du serveur de données à d'autres personnes. Il est très tolérant aux pannes. Vous pouvez inclure n'importe quel nombre de cas, il est beaucoup plus facile à l'échelle que les autres options. Il a une forte .net et java les options du client. Ils ont le regroupement de connexion, l'équilibrage de la charge, le marquage des morts serveurs,...

Une autre option est de hadoop pour le big data, mais ce n'est pas en temps réel comme les autres, vous pouvez utiliser hadoop pour datawarehousing. Ni cassandra ou mongo ont les transactions, donc si vous avez besoin d'opérations de postgresql est un meilleur ajustement. Une autre option est d'Amazon RDS, mais c'est la performance qui est mauvais et le prix est élevé. Si vous souhaitez utiliser des bases de données ou simpledb vous pouvez également besoin de mise en cache des données (par exemple: memcached).

Pour les applications web, si vos données est petit je recommande mongo, s'il est grand cassandra est mieux. Vous n'avez pas besoin d'une couche de mise en cache avec mongo ou cassandra, ils sont déjà rapide. Je ne recommande pas simpledb, elle impose aussi à vous pour Amazon comme vous l'avez dit.

Si vous êtes à l'aide de c#, java ou scala vous pouvez écrire une interface et mettre en œuvre de mongo, mysql, cassandra ou quoi que ce soit d'autre pour la couche d'accès aux données. C'est plus simple dans la dynamique des langues (par exemple, frotter,python,php). Vous pouvez écrire un fournisseur pour deux d'entre eux si vous voulez et pouvez modifier le stockage peut-être que dans l'exécution, par un seulement un changement de configuration, ils sont tous possibles. Développement avec mongo,cassandra et simpledb est plus facile qu'une base de données, et ils sont libres de schéma, il dépend également de la bibliothèque de client/connecteur que vous utilisez. Le plus simple est de mongo. Il n'y a qu'un index par table de cassandra, de sorte que vous avez à gérer d'autres indices vous-même, mais avec la version 0.7 de cassandra index secondaires sont bu possible que je sais. Vous pouvez également commencer par l'un d'eux et le remplacer dans le futur si vous devez.

Ce qui concerne Serdar Irmak

21voto

Gates VP Points 26481

Je pense que vous avez à la fois une question de temps et de vitesse.

MongoDB / Cassandra va être beaucoup plus rapide, mais vous aurez à investir $$$ pour les faire aller. Cela signifie que vous aurez besoin pour exécuter / mise en place d'instances de serveur pour tous entre eux et de comprendre comment ils fonctionnent.

D'autre part, vous n'avez pas à par un "par transaction" coût directement, vous ne payez que pour le matériel qui est probablement plus efficace pour les plus grands services.

Dans le Cassandra / MongoDB lutte voici ce que vous trouverez (basé sur des tests je me suis personnellement impliqué au cours des derniers jours).

Cassandra:

  • Mise à l'échelle / la Redondance est très de base
  • La Configuration peut être très intense
  • Pour faire du reporting vous avez besoin de réduire la carte, pour que vous avez besoin pour exécuter une hadoop couche. C'était une douleur pour obtenir configurés et une plus grande douleur pour obtenir performant.

MongoDB:

  • La Configuration est relativement facile (même pour la nouvelle fragmentation, cette semaine)
  • La redondance est toujours "y arriver"
  • Réduire la carte est intégré et il est facile d'obtenir des données.

Honnêtement, compte tenu de la configuration du temps nécessaire pour notre 10s de go de données, nous sommes allés avec MongoDB sur notre fin. Je les imagine SimpleDB pour "doit obtenir l'exécution de ces" cas. Mais la configuration d'un nœud à exécuter MongoDB est tellement ridiculement simple qu'il peut être intéressant de sauter le "SimpleDB" route.

En termes de DAO, il y a des tonnes de bibliothèques déjà pour Mongo. L'Épargne cadre pour Cassandra est bien pris en charge. Vous pouvez probablement écrire une logique simple de faire abstraction de connexions. Mais il sera plus difficile de faire abstraction des choses plus complexes que de simples CRUD.

0voto

Optimiza Points 1

Il existe un article complet sur l’utilisation de MongoDB et son analyse comparative sur AWS:

http://blog.celingest.com/fr/2013/02/01/benchmarking-mongodb-replica-aws/

Les mêmes gars ont également partagé un modèle CloudFormation dans Github:

https://github.com/celingest/mongo-formation

J'espère que ça aide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X