Question

En ce moment je suis développer le prototype d'une application web qui agrégats grand nombre d'entrées de texte à partir d'un grand nombre d'utilisateurs. Ces données doivent être fréquemment affichées en arrière et souvent mis à jour. En ce moment, je stocke le contenu dans une base de données MySQL et d'utiliser la couche ORM NHibernate pour interagir avec le DB. J'ai une table définie pour les utilisateurs, les rôles, les présentations, les balises, les notifications, etc Je aime cette solution car il fonctionne bien et mon code semble agréable et sain d'esprit, mais je suis aussi inquiet sur la façon dont MySQL effectuera une fois la taille de notre base de données atteint un nombre important. Je pense qu'il peut lutter d'effectuer des opérations de jointure assez vite.

Cela me fait penser au sujet du système de base de données non relationnelle tels que MongoDB , CouchDB , Cassandra ou Hadoop . Malheureusement, je n'ai aucune expérience avec les deux. J'ai lu quelques bonnes critiques sur MongoDB et il semble intéressant. Je suis heureux de passer le temps et apprendre si l'on se révèle être le chemin à parcourir. Je vous remercie beaucoup de points offrant une ou des questions à considérer lors d'aller avec aucun SGBDR?

Était-ce utile?

La solution

Les autres réponses ici ont porté principalement sur les aspects techniques, mais je pense qu'il ya des points importants à faire qui mettent l'accent sur la Startup company aspect des choses:

  • Availabililty de talent. MySQL est très commun et vous trouverez probablement plus facile (et plus important encore, moins cher) pour trouver des développeurs pour cela, par rapport aux systèmes de base de données plus raréfiés. Cette base de développement plus large se traduira également par d'autres didacticiels, une communauté de soutien plus actif, etc.
  • facilité de développement. Encore une fois, parce que MySQL est si commun, vous trouverez qu'il est le db de choix pour un grand nombre de systèmes / services. Ce terrain d'entente peut rendre toute intégration externe un peu plus facile.
  • Vous préparez une situation qui ne peut jamais exister et est gérable si elle le fait. Très peu d'entreprises (Passons sur les startups) viennent près des limites de MySQL, et avec tout le respect (et je suis juste deviner ici); la probabilité que votre démarrage sera jamais frappé le type de données à débit paralysent un bien structuré, db MySQL dispose de ressources suffisantes est presque nulle.

En fait, ne passez pas votre temps (== argent) se soucier de quelle base à utiliser, comme MySQL peut gérer beaucoup de. Données, est bien éprouvée et bien pris en charge

Pour revenir à l'aspect technique des choses ... Quelque chose qui aura un far plus grand impact sur la vitesse de votre application que le choix de db, est de savoir comment les données peuvent être efficacement mises en cache . Un cache efficace peut avoir des effets dramatiques sur la réduction de la charge db et l'accélération de la responsivness générale d'une application. Je passerais votre temps à étudier des solutions de mise en cache et en vous assurant que vous développez votre application de telle manière qu'il puisse tirer le meilleur parti de ces solutions.

Pour votre information, ma solution de mise en cache de choix est memcached .

Autres conseils

Jusqu'à présent, personne ne l'a mentionné PostgreSQL comme alternative à MySQL sur le côté relationnel. Sachez que MySQL libs sont pures GPL, LGPL pas. Cela pourrait vous forcer à libérer votre code si vous établissez un lien pour eux, mais peut-être quelqu'un avec plus d'expérience juridique pourrait vous dire mieux les conséquences. De l'autre côté, un lien vers une bibliothèque de MySQL est pas la même que la connexion juste aux commandes du serveur et numéro, vous pouvez le faire avec la source fermée.

PostreSQL est généralement le meilleur remplacement gratuit d'Oracle et la licence BSD devrait être plus favorable aux entreprises.

Puisque vous préférez une base de données non relationnelle, considèrent que la transition sera plus dramatique. Si vous avez besoin de personnaliser votre base de données, vous devriez également considérer le facteur de type de licence.

Il y a trois choses qui ont vraiment un impact profond sur lequel est votre meilleur choix de base de données et vous ne mentionnez pas:

  1. La taille de vos données ou si vous avez besoin de stocker des fichiers dans votre base de données.
  2. Un grand nombre de lectures et très peu (même restreint) écrit. Dans ce cas, plus d'une base de données dont vous avez besoin d'un répertoire tel que LDAP
  3. L'importance de la distribution des données et / ou la réplication. La plupart des bases de données relationnelles peuvent être plus ou moins bien reproduites, mais à cause de leur concept / conception ne gère pas la distribution des données aussi bien ... mais vous gérer autant de données qui ne correspond pas à un serveur ou qui ont des droits d'accès qui a besoin séparé spécial / serveurs supplémentaires?

Cependant, la plupart des gens partirez pour une base de données non relationnelle simplement parce qu'ils ne le font pas comme l'apprentissage SQL

Que pensez-vous est une quantité importante de données? MySQL , et les moteurs de base de données relationnelles essentiellement plus, peut gérer assez grande quantité de données, avec des indices appropriés et base de données saine schéma.

Pourquoi ne pas essayer comment MySQL avec plus se comporte quantité de données dans votre configuration? Faites des scripts qui génèrent des données réalistes à la base de données de test MySQL et et générer une charge sur le système et voir si elle est assez rapide.

Seulement quand il est pas assez rapide, tout d'abord commencer à envisager l'optimisation de la base de données et le changement de moteur de base de données.

Attention aux NHibernate , il est facile de faire une solution qui est agréable et facile à coder avec, mais a mauvaise performance avec une grande quantité de données. Par exemple si vous souhaitez utiliser paresseux ou désireux fetching avec les associations devraient être examinées avec soin. Je ne veux pas dire que vous ne devriez pas utiliser NHibernate, mais assurez-vous que vous comprenez comment fonctionne NHibernate, par exemple ce « n + 1 sélectionne » des moyens -problem.

Mesure, ne présumez pas.

Bases de données relationnelles et les bases de données NoSQL peuvent énormément est écrit à la fois l'échelle, si la bonne application dans chaque cas, et si le système fonctionne, il est sur bien réglé.

Donc, si vous avez un cas d'utilisation pour NoSQL, code pour elle. Ou, si vous êtes plus à l'aise avec relationnelle, le code à cela. Ensuite, mesurer à quel point il fonctionne et comment il adapte, et si elle va bien, aller avec elle, sinon, analyser pourquoi.

Une seule fois que vous comprenez votre problème de performance si vous allez chercher la technologie exotique, à moins que vous êtes à l'aise avec cette technologie ou si vous voulez l'essayer pour une autre raison.

Je vous suggère d'essayer chaque db et choisissez celui qui le rend plus facile à développer votre application. http://try.mongodb.org pour essayer MongoDB avec un tutoriel simple. Ne vous inquiétez pas autant de vitesse depuis au moment développeur de départ est plus précieux que le temps CPU.

Je sais que de nombreux utilisateurs de MongoDB ont pu fossé leur ORM et leur couche de mise en cache. Le modèle de données de Mongo est beaucoup plus proche des objets que vous travaillez avec de tables relationnelles, vous pouvez habituellement juste stocker directement vos objets en l'état, même si elles contiennent des listes d'objets imbriqués, comme un billet de blog avec des commentaires. De plus, parce que mongo est assez rapide pour la plupart des sites en l'état, vous pouvez éviter de traiter la complexité de la mise en cache et généralement un site livrez plus en temps réel. Par exemple, Wordnik.com rapporté 250 000 lectures / s et 100.000 insertions / s avec un 1.2To / DB 5 milliards d'objets.

Il y a quelques façons de se connecter à MongoDB de .Net, mais je n'ai pas assez d'expérience avec cette plate-forme de savoir qui est le mieux:

Disclaimer:. Travail I pour 10gen sur MongoDB donc je suis un peu biaisé

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top