2011-06-01 4 views
2

J'ai une très petite base de données MySQL où la table principale contient environ 300 enregistrements et j'en rajoute parfois. La table stocke les emplacements dans des fichiers et certaines métadonnées pour les éléments vidéo auxquels mes utilisateurs ont accès. (titre du film, chemin, nom de l'image clé, nom du film, nom du fichier, etc.)Conversion d'une base de données MySQL simple en une solution NoSQL

Je voulais déplacer cette table vers une solution en mémoire, mais je suis confus maintenant-un-jour quant à ces options là sont et ce qui est vraiment le poids le plus rapide, le plus léger, le meilleur pour l'argent.

Redis? MongoDB? Autre chose? MySQL peut-il fonctionner en mémoire?

Je prévois d'ajouter d'autres bases de données pour différents projets.

La boîte sur laquelle il fonctionne est CentOS 5.6, RAM 16gb et je reçois environ 100 visiteurs par jour sur mon site.

+0

Si votre table est si petite, je m'attendrais à ce que MySQL ait toute la mémoire cache en mémoire. Vous remarquez que la base de données semble particulièrement lente? –

+0

Quelle est votre intention? Pourquoi voulez-vous avoir une solution en mémoire? Tous les principaux SGBD aiment avoir de grandes quantités de mémoire pour la mise en cache et sont assez rapides. Donc, je suis vraiment curieux de connaître vos raisons pour une solution en mémoire. –

+0

@Eric Petroelje - Non, ce n'est pas lent, juste avec de plus en plus de visiteurs tous les jours tout en regardant des images, je suis en train de maximiser l'efficacité de la boîte. Je dois mettre en place le vernis suivant. http://6colors.net – TalkingTom

Répondre

0

Cela dépend de la façon dont vous voulez accéder/interroger vos enregistrements dans la base de données. MongoDB est un magasin de documents, il fait le maximum de ce que Mysql peut faire. Mais je ne dirais pas que MongoDB est une solution légère.

Redis est une base de données clé/valeur rapide en mémoire. Mais vous ne pouvez accéder à vos enregistrements que par une clé spécifique.

+0

Eh bien mon dans ma table chaque enregistrement a une clé unique – TalkingTom

0

Le moyen le plus simple est d'utiliser le moteur de table MySQL MEMORY. Il stocke toutes les données en mémoire et il est supprimé lorsque le serveur MySQL cesse de fonctionner.

0

Le plus simple est de configurer mysql pour qu'il garde tout en mémoire (ce que vous avez en abondance).

Voir les réponses sur la taille du pool tampon ici Is it possible to load a database in the RAM?

Avec une petite table, même avec la configuration par défaut, il est probablement déjà dans la RAM à toutes fins pratiques.

0

Avec 300 enregistrements, vous ne verrez aucun avantage mesurable à passer à un système nosql. Yse, MySQL peut utiliser la mémoire comme substrat pour stocker des tables - mais si votre base de données entière est plus petite que la quantité de mémoire disponible sur votre système, cela ne vaut vraiment pas le coup - le système d'exploitation le plus moderne (y compris Linux) très rarement avoir à lire à partir du disque - et vous n'avez pas le tracas de maintenir une copie de la base de données sur le disque pour survivre à des redémarrages.

Votre base de données est minuscule. "Je reçois environ 100 visiteurs par jour sur mon site" est une métrique assez insignifiante mais qui implique un très faible niveau de trafic. La mémoire vive est beaucoup de mémoire - elle pourrait bien être ce dont vous avez besoin pour votre application si vous manipulez beaucoup de fichiers multimédias, par contre.

1

La première chose que vous devez vous demander est: pourquoi voulez-vous passer à une base de données NoSQL?

réponses pourraient être: Vous avez besoin de plus de vitesse, vous voulez un système de base de données répliquées et distribuées, vous avez besoin de plus d'évolutivité pour le stockage utilisé ou la réplication. Ou vous voulez bénéficier probablement de de développement plus facile.

Mais à partir de 300 dossiers, je ne pense pas, mais de la dernière vous aiderait.

Et je ne pense pas que vous voulez vraiment une solution "in-memory" . En mémoire signifie que toutes les données ont été écrites pour ram, et si vous fermez votre base de données, toutes vos données sont perdues. Si vous le voulez vraiment, MySQL dispose d'un moteur de stockage en mémoire.

Sinon, toutes les bases de données seront mises en mémoire cache autant que possible dans la mémoire . Et 300 dossiers seront probablement complètement dans votre RAM également sous MySQL. Vous n'obtenez probablement pas aucun avantage de vitesse en passant à une base de données NoSQL. Si vous prévoyez en général de passer à une base de données NoSQL, je préférerais MongoDB. C'est un mélange de NoSQL et et un SGBDR, car il vous donne un langage de requête puissant presque comme SQL. Et vous pouvez l'éliminer mieux que que RDBMS. Et pour moi, la programmation sera beaucoup plus facile avec une base de données sans schéma. Vous pouvez échelle MongoDB jusqu'à 1000 serveurs.

Mais d'autres bases de données NoSQL ont beaucoup plus d'évolutivité. Si vous avez besoin de plus de serveurs, alors d'autres bases de données pourraient être mieux traitées. Mais vous perdez un moyen d'interroger vos données .

Si vous envisagez généralement de passer à une base de données NoSQL , je pense que MongoDB pourrait gérer cela. D'autres bases de données NoSQL sont probablement meilleures pour certains cas spécifiques et non pour un usage général.

Questions connexes