MongoDB vs. Cassandra vs. MySQL pour la plate-forme de publicité en temps réel

Je travaille sur une plate-forme de publicité en temps réel avec un accent particulier sur la performance. J'ai toujours développé avec MySQL, mais je suis ouvert à essayer quelque chose de nouveau comme MongoDB ou Cassandra si des gains de vitesse importants peuvent être obtenus. J'ai lu sur les deux toute la journée, mais comme les deux sont en cours de développement rapide, beaucoup d'informations semblent quelque peu datées.

Les principales données stockées serait entrées pour chaque clic, incrémenté lignes de vues et d'informations pour chaque campagne (juste quelques paramètres de base, etc). Les gains de vitesse doivent être trouvés dans l'insertion de clics, la mise à jour des totaux de vue et la génération de rapports statistiques en temps réel. La plate-forme est développée avec PHP.

Ou peut-être aucun de ceux-ci?

46
demandé sur Community 2011-05-28 20:06:46

7 réponses

Il y a plusieurs façons d'y parvenir avec toutes les technologies énumérées. C'est plus une question de comment vous les utilisez. Votre solution idéale peut utiliser une combinaison de ceux-ci, avec une certaine considération pour les modèles d'utilisation. Je ne pense pas que l'information là-bas est que daté parce que les concepts en jeu sont très fondamentaux. Il peut y avoir de nouvelles bases de données NoSQL et des correctifs à celles existantes, mais votre question Est principalement architecturale.

Les solutions NoSQL comme MongoDB et Cassandra obtiennent un beaucoup d'attention pour leur performance d'insertion. Les gens ont tendance à se plaindre des performances de mise à jour/insertion des bases de données relationnelles, mais il existe des moyens d'atténuer ces problèmes.

En commençant par MySQL, vous pouvez passer en revue MySQL haute Performance de O'Reilly, optimiser le schéma, ajouter plus de mémoire peut-être l'exécuter sur un matériel différent du reste de votre application (en supposant que vous avez utilisé MySQL pour cela), ou partitionner/partager des données. Un autre domaine à considérer est votre application. Pouvez-vous la file d'attente insère et met à jour au niveau de l'application avant l'insertion dans la base de données? Cela vous donnera une certaine flexibilité et est probablement utile dans tous les cas. Selon l'apparence de votre schéma final, MySQL vous aidera à extraire les données tant que vous êtes à l'aise avec SQL. C'est un avantage si vous avez besoin d'utiliser des outils de reporting tiers, etc.

MongoDB et Cassandra sont des bêtes différentes. Ma compréhension est qu'il était plus facile d'ajouter des nœuds à ce dernier, mais cela a changé depuis que MongoDB a la réplication etc intégré. Les insertions pour ces deux plates-formes ne sont pas contraintes de la même manière qu'une base de données relationnelle. De l'extraction de données est assez rapide aussi, et vous avez beaucoup de flexibilité avec les changements de format. Le compromis est que vous ne pouvez pas utiliser SQL (un avantage pour certains), donc obtenir des rapports peut être plus délicat. Rien ne vous empêche de collecter des données sur l'une de ces plates-formes, puis de les importer dans une base de données MySQL pour plus analyse.

En fonction de vos besoins, il existe d'autres outils que les bases de données NoSQL que vous devriez regarder tels que Flume. Ceux-ci utilisent la plate-forme Hadoop qui est largement utilisée pour l'analyse. Ceux - ci peuvent avoir plus de flexibilité qu'une base de données pour ce que vous faites. Il y a du contenu de Hadoop World qui pourrait vous intéresser.

33
répondu Brian Lyttle 2011-05-28 17:19:36

Les solutions Nosql sont meilleures que Mysql, postgresql et d'autres technologies SGBDR pour cette tâche. Ne perdez pas votre temps avec Hbase / Hadoop, vous devez être un astronaute pour l'utiliser. Je recommande MongoDB et Cassandra. Mongo est meilleur pour les petits ensembles de données (si vos données sont au maximum 10 fois plus grandes que votre ram, sinon vous devez fragmenter, avoir besoin de plus de machines et utiliser des jeux de répliques). Pour le big data; cassandra est le meilleur. Mongodb a plus d'options de requête et d'autres fonctionnalités que cassandra mais vous avez besoin de 64 bits machines pour mongo. Il y a quelques travaux autour de l'analyse des deux côtés. Il y a des compteurs atomiques des deux côtés. Les deux peuvent bien évoluer mais cassandra est beaucoup mieux dans la mise à l'échelle et la haute disponibilité. Les deux ont des clients php, les deux ont un bon support et une bonne communauté (la communauté mongo est plus grande).

Cassandra analytics échantillon de projet: Rainbird http://www.slideshare.net/kevinweil/rainbird-realtime-analytics-at-twitter-strata-2011

Échantillon de Mongo: http://www.slideshare.net/jrosoff/scalable-event-analytics-with-mongodb-ruby-on-rails

Http://axonflux.com/how-superfeedr-built-analytics-using-mongodb

Les développeurs Doubleclick ont développé mongo http://www.informationweek.com/news/software/info_management/224200878

21
répondu sirmak 2015-12-08 12:30:35

Caractéristiques de MySQL:

  • verrouillage de base de données (beaucoup plus facile pour les transactions financières)
  • cohérence / sécurité (comme ci-dessus, vous pouvez garantir, par exemple, qu'aucun changement ne se produit entre le moment où vous lisez un solde de compte bancaire et que vous le mettez à jour).
  • organisation/refactoring des données (vous pouvez avoir des données désorganisées n'importe où, mais MySQL est meilleur avec des tables qui représentent des "types" ou des "composants", puis les combiner en requêtes - ceci est appelé normalisation).

Caractéristiques de Cassandra:

  • Vitesse
  • disponibilité (les données sont toujours disponibles, même si elles sont "correctes"à 100%)
  • champs optionnels (peut être fait dans MySQL avec des tables meta, etc., mais c'est gratuit dans Cassandra)

Cassandra est un stockage clé-valeur ou basé sur un document. Pensez à ce que cela signifie. Typiquement, je donne à Cassandra une clé et je récupère un ensemble de données. Il peut se ramifier à partir de là, mais c'est essentiellement ce qui se passe sur. C'est plus comme accéder à un fichier statique. Bien sûr, vous pouvez avoir plusieurs index, champs de compteur, etc. mais je fais une généralisation. C'est de là que vient Cassandra.

MySQL et SQL sont basés sur la théorie des groupes/ensembles-il a un moyen de combiner N'importe quelle relation entre les ensembles de données. Il est assez facile de prendre une requête MySQL, de faire de la requête une "clé" et de la réponse une "valeur" et de la stocker dans Cassandra (par exemple, faire de Cassandra un cache). Cela pourrait aider à expliquer le compromis aussi, MySQL permet vous pouvez toujours réorganiser vos tables de données et les relations entre les ensembles de données simplement en écrivant une requête différente. Cassandra pas tellement. Et sachez que même si Cassandra pourrait fournir des fonctionnalités pour faire certaines de ces choses, ce n'est pas ce pour quoi il a été construit.

MongoDB et CouchDB se situent quelque part au milieu de ces deux extrêmes. Je pense que MySQL peut être un peu verbeux et ennuyeux à traiter, surtout lorsqu'il s'agit de champs optionnels, et de migrations si vous n'avez pas de bon modèle ou d'outils. Aussi avec l'évolutivité, je suis sûr qu'il existe de grandes technologies pour mettre à l'échelle une base de données MySQL, mais Cassandra évoluera toujours, et facilement, en raison des limitations sur son ensemble de fonctionnalités. MySQL est un peu plus illimité. Cependant, NoSQL et Cassandra font Pas faire des jointures, l'une des fonctionnalités critiques de SQL qui permet de combiner plusieurs tables dans une seule requête. Ainsi, les requêtes relationnelles complexes ne seront pas mises à L'échelle dans Cassandra.

16
répondu Ryan Taylor 2018-09-26 15:37:26

Je voudrais aussi ajouter Membase (www.couchbase.com) à cette liste.

En tant que produit, Membase a été déployé dans un certain nombre d'agences de publicité (AOL Advertising, Chango, Delta Projects, etc.). Il existe un certain nombre d'études de cas publiques et d'exemples de la façon dont ces entreprises ont utilisé Membase avec succès.

Bien qu'il soit certainement sujet à débat, nous avons constaté que Membase offre de meilleures performances et évolutivité que toute autre solution. Ce qui nous manque dans l'indexation / l'interrogation, nous sommes la planification de plus que compenser avec L'intégration de CouchDB comme notre nouveau backend de persistance.

En tant qu'entreprise, Couchbase (les fabricants de Membase) a une grande quantité de connaissances et d'expérience répondant spécifiquement aux besoins des entreprises de publicité/ciblage.

Aimerait certainement vous engager sur ce cas d'utilisation particulier pour voir si Membase est le bon choix.

Veuillez me tirer un email (perry-at-couchbase-dot-com) ou nous rendre visite sur les forums: http://www.couchbase.org/forums/

Perry Krug

5
répondu Perry krug 2011-05-31 18:44:28

Cassandra vs MongoDB Envisagez-vous Cassandra ou MongoDB comme magasin de données pour votre prochain projet? Vous souhaitez comparer les deux bases de données? Cassandra et MongoDB sont toutes deux des bases de données" NoSQL", mais la réalité est qu'elles sont très différentes. Ils ont des forces et des propositions de valeur très différentes-toute comparaison doit donc être nuancée. Commençons par les exigences initiales... aucune de ces bases de données ne remplace le SGBDR, ni ne sont-elles des bases de données" acides". Donc, si vous avez un charge de travail transactionnelle où la normalisation et la cohérence sont les principales exigences, aucune de ces bases de données ne fonctionnera pour vous. Vous feriez mieux de rester avec des bases de données relationnelles traditionnelles comme MySQL, PostGres, Oracle, etc. Maintenant que nous avons des bases de données relationnelles à l'écart, considérons les principales différences entre Cassandra et MongoDB qui vous aideront à prendre la décision. Dans ce post, je ne vais pas discuter des caractéristiques spécifiques, mais expose certaines stratégique de haut niveau différences pour vous aider à faire votre choix.

  1. Modèle D'Objet Expressif MongoDB prend en charge un modèle d'objet riche et expressif. Les objets peuvent avoir des propriétés et les objets peuvent être imbriqués les uns dans les autres (pour plusieurs niveaux). Ce modèle est très "orienté objet" et peut facilement représenter n'importe quelle structure d'objet dans votre domaine. Vous pouvez également l'indice de la propriété d'un objet à n'importe quel niveau de la hiérarchie – c'est étonnamment puissant! Cassandra, d'autre part, offre une table assez traditionnelle structure avec des lignes et des colonnes. Les données sont plus structurées et chaque colonne a un type spécifique qui peut être spécifié lors de la création.

Verdict: si votre domaine à problème a besoin d'un modèle de données riche, MongoDB vous convient mieux.

  1. Indices Secondaires Les index secondaires sont une construction de première classe dans MongoDB. Cela permet d'indexer facilement n'importe quelle propriété d'un objet stocké dans MongoDB même s'il est imbriqué. Cela rend vraiment facile à interroger en fonction de ces index secondaires. Cassandra n'a qu'un support superficiel pour les index secondaires. Les index secondaires sont également limités aux colonnes simples et aux comparaisons d'égalité. Si vous allez surtout interroger par la clé primaire, Cassandra fonctionnera bien pour vous.

Verdict: si votre application a besoin d'index secondaires et a besoin de flexibilité dans le modèle de requête, MongoDB vous convient mieux.

  1. Haute Disponibilité MongoDB prend en charge un modèle" single master". Cela signifie que vous avez un nœud maître et un certain nombre de nœuds esclaves. Dans le cas où le maître tombe, l'un des esclaves est élu maître. Ce processus se produit automatiquement, mais cela prend du temps, généralement 10-40 secondes. Pendant cette période de l'élection du nouveau Chef, votre jeu de réplique est en panne et ne peut pas prendre des Écritures. Cela fonctionne pour la plupart des applications, mais dépend finalement de vos besoins. Cassandra prend en charge un modèle" multiple master". La perte d'un seul nœud n'affecte pas la capacité du cluster à prendre des Écritures – vous pouvez donc atteindre 100% de disponibilité pour les écritures.

Verdict: si vous avez besoin de 100% de disponibilité, Cassandra est un meilleur choix pour vous.

  1. Évolutivité D'Écriture MongoDB avec son modèle "single master" peut prendre des Écritures uniquement sur le primaire. Les serveurs secondaires ne peuvent être utilisés que pour les lectures. Donc, essentiellement si vous avez un jeu de réplicas à trois nœuds, seul le maître prend des Écritures et les deux autres nœuds ne sont utilisés que pour les lectures. Cela limite considérablement l'évolutivité en écriture. Vous pouvez déployer plusieurs fragments, mais essentiellement seulement 1/3 de vos données les nœuds peuvent prendre des écritures. Cassandra avec son modèle "multiple master" peut prendre des Écritures sur n'importe quel serveur. Essentiellement votre écriture évolutivité est limité par le nombre de serveurs dans le cluster. Plus vous avez de serveurs dans le cluster, mieux il évoluera.

Verdict: si l'évolutivité d'écriture est votre truc, Cassandra est un meilleur ajustement pour vous.

  1. Prise En Charge De La Langue De Requête Cassandra prend en charge le langage de requête CQL qui est très similaire à SQL. Si vous avez déjà une équipe de analystes de données ils seront en mesure de porter sur la majorité de leurs compétences SQL qui est très important pour les grandes organisations. Cependant, CQL N'est pas un SQL ANSI complet – il a plusieurs limitations (pas de support de jointure, pas de clauses ou), etc. MongoDB à ce stade n'a pas de support pour un langage de requête. Les requêtes sont structurées en fragments JSON.

Verdict: si vous avez besoin d'un support de langage de requête, Cassandra est la meilleure solution pour vous.

  1. Indicateurs De Performance Parlons-en performance. À ce stade, vous attendez probablement une comparaison de référence de performance des bases de données. Je n'ai délibérément pas inclus de repères de performance dans la comparaison. Dans toute comparaison, nous devons nous assurer que nous faisons une comparaison pommes à pommes.

  2. Modèle de base de données - le modèle/schéma de base de données de l'application testée fait une grande différence. Certains schémas sont bien adaptés pour MongoDB et certains sont bien adaptés pour Cassandra. Donc, lors de la comparaison des bases de données il est important d'utiliser un modèle qui fonctionne raisonnablement bien pour les deux bases de données.

  3. Caractéristiques de charge - les caractéristiques de la charge de référence sont très importantes. Par exemple, dans les benchmarks lourds en écriture, je m'attendrais à ce que Cassandra fume MongoDB. Cependant, dans les benchmarks lourds en lecture, MongoDB et Cassandra devraient avoir des performances similaires.
  4. Exigences de cohérence - c'est délicat. Vous devez vous assurer que les exigences de cohérence en lecture/écriture spécifiées sont identiques dans les deux bases de données et non biaisé vers un participant. Très souvent, dans un certain nombre de points de référence "Marketing", les boutons sont réglés pour désavantager l'autre côté. Donc, portez une attention particulière aux paramètres de cohérence.

Une dernière chose à garder à l'esprit est que la charge de référence peut ou non refléter les performances de votre application. Donc, pour que les benchmarks soient utiles, il est très important de trouver une charge de benchmark qui reflète les caractéristiques de performance de votre application. Voici quelques repères que vous voudrez peut-être regarder: - NoSQL Tests De Performance - Cassandra vs MongoDB vs Couchbase vs HBase

  1. facilité d'utilisation Si vous aviez posé cette question il y a quelques années MongoDB serait le vainqueur. C'est une tâche assez simple pour mettre MongoDB en marche. Dans les deux dernières années, cependant, Cassandra a fait de grands progrès dans cet aspect du produit. Avec L'adoption de CQL comme interface principale pour Cassandra, il a pris un peu plus loin-ils ont rendu très simple pour les légions de programmeurs SQL d'utiliser Cassandra très facilement.

Verdict: les deux sont assez faciles à utiliser et à monter en puissance.

  1. Natif De L'Agrégation MongoDB dispose d'un framework D'agrégation intégré pour exécuter un pipeline ETL afin de transformer les données stockées dans la base de données. Ceci est idéal pour les petites et moyennes tâches, mais à mesure que vos besoins de traitement des données deviennent plus compliqués, le cadre d'agrégation devient difficile à déboguer. Cassandra n'a pas de cadre d'agrégation intégré. Des outils externes comme Hadoop, Spark sont utilisés pour cela.

  2. Modèles sans schéma Dans MongoDB, vous pouvez choisir de ne pas appliquer de schéma sur vos documents. Bien que ce soit la valeur par défaut dans les versions antérieures dans la version la plus récente, vous avez la possibilité d'appliquer un schéma pour vos documents. Chaque document dans MongoDB peut être une structure différente et c'est à votre application d'interpréter les données. Bien que cela ne soit pas pertinent pour la plupart applications, dans certains cas, la flexibilité supplémentaire est importante. Cassandra dans les versions plus récentes (avec CQL comme langue par défaut) fournit un typage statique. Vous devez définir le type de colonne très à l'avance.

4
répondu sanjusci 2017-12-28 18:52:29

Je considérerais New Relic comme un exemple de charge de travail similaire. Ils capturent plus de 200 milliards de points de données par jour sur le disque et utilisent MySQL 5.6 (Percona) comme backend.

Un billet de blog est disponible ici: http://blog.newrelic.com/2014/06/13/store-200-billion-data-points-day-disk/

3
répondu Morgan Tocker 2014-06-14 03:44:13

Si vous prévoyez d'avoir besoin d'une évolutivité horizontale, je commencerais par MongoDB / Cassandra au lieu de MySQL. MySQL est également non trival pour fonctionner en production - les frameworks pour le basculement sont très grossiers à mon avis.

J'ai mis en place un article de blog sur les différences de haut niveau entre Mongodb et Cassandra ici - https://scalegrid.io/blog/cassandra-vs-mongodb/

0
répondu Dharshan 2016-08-14 02:24:12