2010-10-24 8 views
0

Je pense à faire ce qui suit et j'ai besoin de suggestions s'il est logique de l'aborder de cette façon. Fondamentalement, puisque je suis capable de faire des requêtes dans MongoDB et MongoDb est méchant rapidement à ceux-ci depuis les hotspots des données sont mis en cache dans la mémoire. Je pensais stocker des données dont je ferais normalement une jointure dans mysql dans mongoDB. Alors que j'utilise memcached pour stocker des résultats de requête simples (par exemple une page de description de film), pour des choses plus importantes qui nécessitent plus de requêtes en temps réel/ondemand, je pensais stocker cela dans MongoDB. Par exemple, la vue compte pour les films et qui l'a vu, et fait des analyses dessus.MongoDB en tant que cache pour les jointures et requêtes fréquentes de MySQL

J'espère que je l'ai expliqué clairement.

plus d'info:

Nous ne voulons pas continuer à écrire à notre serveur MySQL sur chaque note comme etc, MongoDB semblait être une bonne option pour stocker les évaluations, des vues de films etc et puis plus tard être en mesure de le faire traitement sur ces données. Alors que les données ne sont pas Memcached persisté et ont été incapables de faire des requêtes

Merci, Faisal

Répondre

2

la mise en cache de la mémoire n'est pas seul une bonne raison d'aller avec MongoDB. Tout SGBDR configuré correctement cache les données fréquemment utilisées dans la mémoire.

Quel aspect de MySQL limite actuellement vos performances? Avez-vous assez de RAM dans votre serveur? Vos disques sont-ils assez rapides? Avez-vous un périphérique de cache à faible latence comme un SSD configuré de manière appropriée?

+0

Nous n'avons pas encore atteint l'implémentation. Étaient dans la phase où regardaient différentes options. Je pensais à cela parce que MongoDB est fortement utilisé à Foursquare pour faire des checkins, et il traite ces données de façon algorithmique. Parce que nous ne voulons pas continuer à écrire sur notre serveur mysql, MongoDB est apparu comme une bonne option pour stocker les notes, les vues, etc. et ensuite pouvoir traiter ces données. Alors qu'avec Memcached, les données ne sont pas conservées et n'ont pas pu effectuer de requêtes. –

+0

MongoDB est bon pour effectuer des opérations de type clé/valeur de magasin. Est-ce que votre tâche implique principalement ceux-là? Une configuration de base de données hybride n'est pas nécessairement mauvaise, mais vous devriez être TRÈS certain que MongoDB apporte un avantage significatif avant que vous n'implémentiez quelque chose l'utilisant. Vous ne voulez vraiment pas essayer de dupliquer vos données entre deux DB différents. N'essayez pas de stocker des données dans les deux endroits.Vous ne pouvez pas facilement faire une requête qui traverse à la fois MySQL et MongoDB, et vous devez être sûr que vous ne voudrez pas faire cela avant de diviser vos données. –

+0

bien ce que nous avons à l'esprit est dans mongoDB (c'est pour les notes) stocker le userID, videoID, VideoName, note. Ensuite, lorsque l'utilisateur obtient ces données (quand il regarde toutes ses notes) et agit comme s'il regardait la description de la vidéo pour ce film, nous pouvons faire un appel à l'ID vidéo dans Memcached pour obtenir la description, et si les données ne sont pas là alors allez à mysql pour aller chercher et le stocker dans Memcached puis le retourner à l'utilisateur. –

0

Il n'y a rien de mal à utiliser les deux solutions dans votre application. En fait, j'utilise mysql pour stocker les sessions utilisateur comme supposé pour les cookies. De plus, j'ai un autre projet qui utilise mysql mais pour certaines parties de mon application, j'utiliserai MongoDB. Pourquoi? C'est méchant rapide et je déteste écrire des requêtes rejoindre. Il est tellement plus facile de faire apparaître des données dans/hors de mongo que de devoir faire des requêtes de jointure dans mysql.

à savoir

Lorsque vous enregistrez des tags pour un utilisateur particulier, il est si ça alors sacrément eary à enregistrer/modifier/supprimer la balise qui est stocké dans MongoDB. Avec MySQL, j'aurais dû écrire une requête JOINs à plusieurs tables. Pour des données telles que le compte d'utilisateur, le mot de passe, la ville, l'état - j'ai tout sauvé dans MySQL.

0

Ce dont vous parlez, c'est l'idée d'avoir des données normalisées et dénormalisées. Utiliser MongoDB comme un magasin de données dénormalisé pour vos données SQL normalisées est très bien. L'utilisation de Mongodb comme seul magasin de données pour certains types de données convient également. Assurez-vous simplement qu'il est clair dans la conception du système où sont les vraies données et où sont les données dénormalisées.

Les données normalisées sont des faits réels. Les données dénormalisées sont des potins - vous n'êtes pas sûr si c'est à jour ou non.