Mes exigences sont les suivantes:
Actuellement, nous maximums un processeur élevé, une autre instance supplémentaire à 700 connexions. Les 8 cœurs sont maximum. Nous pensons que c'est le nombre de connexions simultanées car la mémoire va bien. L'écriture elle-même est très simple (validations lentes). Pour atteindre 3000, nous devons aller à plusieurs serveurs, options de courant:
Pour gérer ce nombre de connexions, un certain nombre de questions:
Je m'excuse si je ne décris pas mon problème bien. S'il vous plaît poser des questions.
Si vous allez aller à plusieurs têtes (dont vous avez probablement besoin si vous avez vraiment besoin de connexions actives 3K), je regarderais probablement Riak ou peut-être que Cassandra. Cela dépend vraiment de votre application quant à la qualité de ceux-ci, mais de ce que vous avez décrit, je pense que cela correspondait à quelque chose comme Riak.
Cela dit, une approche faite semble assez faisable, si vous pouvez trouver un bon moyen de segmenter les données, et de minimiser les besoins de Shard Cross Shard. Je resterais à l'écart de l'un des trucs de bague/étoile/mmm à MySQL et tenez-vous simplement de frontalier. En fait, si vous étiez disposé à utiliser Postgres, vous pouvez proprimer facilement facilement à l'aide de schémas sur quelque chose comme Heroku, puis à la fourche et diviser les bases de données car ils commencent à dépasser des nœuds individuels.
Oh, et pendant que je pense que vous pourriez essayer d'accroître quelque chose comme celui-ci verticalement (nœud unique gérant tous les deux connets 3k), je ne pense pas que vous puissiez le faire dans le nuage.
Personnellement préfère MongoDB pour sa facilité d'administration, de l'évolutivité, de la facilité d'utilisation générale. En outre, à moins que je n'ai pas besoin d'un SGBDM, je vais utiliser un SQL SQL.
Avec cela, choisissez la DB qui a le plus de sens pour votre application. Si vous avez besoin de transactions ou ne pouvez pas concevoir votre application sans joints (ou tout simplement un simple sens avec eux), utilisez un SDBMS (mySQL, Postgres, etc.)
Bien que je préfère personnellement mongodb, l'idée que MySQL n'échresse pas orcané de manière élevée de transactions est purement fausse. L'équipe d'ingénierie Facebook (et l'équipe MySQL à l'intérieur de l'informatique) en détail avec elle. Découvrez également le blog Etsy Ops Team; Ils aiment aussi MySQL.
Enfin, je n'utiliserais pas Mongodb pour un cache MySQL; Utilisez Memcached pour cela.
ReDIS est également un magasin de valeur de clé intégrée qui convient à la manipulation de certains cas d'utilisation. Il y a quelques entrées de blog sur blog.agoragames.com qui décrivent des cas d'utilisation.
Vous devriez également consulter Couchdb si vous pensez no-sql. Juste soyez conscient qu'il nécessite un maintien régulier pour conserver son utilisation de disque. (Il négocie la vitesse et la commodité pour le disque ...)
Enfin, la planification de la capacité n'est pas facile à prédire. Vous devez tester dans les conditions réalistes que possible et être prêt à assainir en fonction de ce que vous voyez. Malheureusement "informatique" est autant d'art que la science.
Si c'est une option pour votre application spécifique, vous pouvez peut-être utiliser une manière asynchrone pour écrire des données à votre base de données (file d'attente de travail, inserts par lots ...) et/ou déplacer les nombreuses connexions client de votre base de données avec un proxy à l'avant. .
Avec Sharding, vous pouvez généralement échouer bien (2x serveurs de db == connexions 2x), mais cela dépend fortement de la nature de votre ensemble de données et de la façon dont vous pouvez la diviser à travers des éclats.