Pregunta

En este momento estoy desarrollando el prototipo de una aplicación web que los agregados gran número de entradas de texto de un gran número de usuarios. Estos datos se deben con frecuencia muestran espalda y actualizados a menudo. En el momento en que almacenar el contenido dentro de una base de datos MySQL y el uso de la capa ORM NHibernate para interactuar con la base de datos. Tengo una tabla definida por usuarios, roles, presentaciones, etiquetas, etc. notificaciones y me gusta esta solución porque funciona bien y mi código se ve bien y sano, pero también estoy preocupado por cómo MySQL llevará a cabo una vez que el tamaño de nuestra base de datos alcanza un número significativo. Siento que se puede luchar realizar operaciones de unión lo suficientemente rápido.

Esto me ha hecho pensar sobre el sistema de base de datos no relacionales, tales como MongoDB , CouchDB , Cassandra o Hadoop . Por desgracia no tengo experiencia con cualquiera. He leído algunas buenas críticas en MongoDB y parece interesante. Estoy feliz de pasar el tiempo y aprender si uno resulta ser el camino a seguir. Me gusta mucho apreciaría cualquier punto de prestar una o cuestiones a considerar cuando se va con ninguno DBMS relacionales?

¿Fue útil?

Solución

Las otras respuestas aquí se han centrado principalmente en los aspectos técnicos, pero creo que hay puntos importantes que se harán que se centran en el empresa de inicio aspecto de las cosas:

  • Availabililty de talento. MySQL es muy común y es probable que le resulte más fácil (y más importante, más barato) para encontrar a los desarrolladores para que, en comparación con los sistemas de bases de datos más enrarecidos. Esta base de desarrolladores más grande también significa más tutoriales, una comunidad de apoyo más activo, etc.
  • facilidad de desarrollo. Una vez más, ya que MySQL es tan común, usted encontrará que es el PP de elección para un gran número de sistemas / servicios. Este terreno común puede hacer cualquier tipo de integración externa un poco más fácil.
  • se está preparando para una situación que no puede existir, y es manejable si lo hace. Muy pocas empresas (importarles arranques) se acercan a los límites de MySQL, y con el debido respeto (y yo soy sólo una suposición aquí); la probabilidad de que su puesta en marcha va a golpear siempre el tipo de datos de rendimiento para paralizar un bien estructurado, db MySQL bien dotada de recursos es casi cero.

Básicamente, no gastar su tiempo (== dinero) preocuparse por la cual db para su uso, como MySQL puede manejar mucho de los datos, es bien probada y bien apoyado.

Volviendo al aspecto técnico de las cosas ... algo que tendrá un ahora mayor impacto en la velocidad de su aplicación a elección del db, es la eficiencia con que los datos pueden ser caché . Una caché eficaz puede tener efectos dramáticos en la reducción de la carga db y acelerar el responsivness general de una aplicación. Me gustaría pasar su tiempo a investigar soluciones de almacenamiento en caché y asegurarse de que está desarrollando su aplicación de tal manera que se pueda hacer el mejor uso de esas soluciones.

Para su información, mi solución de almacenamiento en caché de elección es memcached .

Otros consejos

Hasta el momento nadie ha mencionado PostgreSQL como alternativa a MySQL en el lado relacional. Tenga en cuenta que son puros bibliotecas de MySQL GPL, LGPL no. Eso podría obligar a liberar su código si se vincula a ellos, aunque tal vez alguien con más experiencia legal podría contar mejor las implicaciones. Por otro lado, la vinculación a una biblioteca de MySQL no es lo mismo que acaba de conectar a los comandos del servidor y el problema, se puede hacer eso con código cerrado.

PostreSQL suele ser la mejor sustitución gratuita de Oracle y la licencia BSD debe ser más negocios.

Desde prefiere una base de datos no relacionales, consideran que la transición será más dramático. Si alguna vez necesita para personalizar su base de datos, también se debe considerar el factor tipo de licencia.

Hay tres cosas que realmente tienen un impacto profundo sobre cuál es su mejor opción de base de datos y que no mencionan:

  1. El tamaño de los datos o si necesita almacenar archivos dentro de su base de datos.
  2. Un gran número de lecturas y escrituras en muy pocos (aunque restringidas). En ese caso, más de una base de datos que necesita un directorio como LDAP
  3. La importancia de de distribución de datos y / o replicación. La mayoría de las bases de datos relacionales pueden ser más o menos bien replicados, pero debido a su concepto / diseño no se encargará de la distribución de datos, así ... pero se puede manejar todos los datos que no caben en un servidor o que tienen derechos de acceso que necesita especial separada / servidores adicionales?

Sin embargo la mayoría de la gente va a ir a una base de datos relacional, no sólo porque no es así como aprender SQL

¿Cuál cree usted que es una cantidad significativa de datos? MySQL , y los motores de bases de datos relacionales, básicamente, la mayoría, pueden manejar bastante grande cantidad de datos, la base de datos de índices adecuados y sana esquema.

¿Por qué no tratar cómo se comporta MySQL con la cantidad de datos más grande en su configuración? Hacer algunos scripts que generan datos realistas a la base de datos MySQL y prueba y generar algo de carga en el sistema y ver si es lo suficientemente rápido.

Sólo cuando no es lo suficientemente rápido, primero empezar a considerar la optimización de la base de datos y cambiar a diferentes motor de base de datos.

Tenga cuidado con NHibernate , es fácil hacer una solución que es agradable y fácil de código con, pero tiene un mal desempeño con gran cantidad de datos. Por ejemplo si desea utilizar la recuperación perezosa o ansiosos con las asociaciones deben ser considerados cuidadosamente. No quiero decir que no se debe utilizar NHibernate, pero asegúrese de que sabe cómo funciona NHibernate, por ejemplo, lo que "n + 1 selecciona" medios -problema.

Medida, no asuma.

Bases de datos relacionales y bases de datos NoSQL pueden tanto en escala enormemente, si la aplicación está escrita justo en cada caso, y si el sistema se ejecuta en está sintonizada correctamente.

Por lo tanto, si usted tiene un caso de uso para NoSQL, código para ello. O, si usted está más cómodo con relacional, código para eso. A continuación, medir lo bien que funciona y cómo se escala, y si está bien, ir con él, si no, analizar por qué.

Sólo una vez que entienda su problema de rendimiento en caso de que ir en busca de la tecnología exótica, a menos que se sienta cómodo con esa tecnología o quieren probarlo por alguna otra razón.

Me gustaría sugerir que pruebe cada db y escoger el que hace que sea más fácil de desarrollar su aplicación. Ir a http://try.mongodb.org para tratar MongoDB con un sencillo tutorial. No se preocupe tanto de la velocidad, ya que en principio el desarrollador tiempo es más valioso que el tiempo de CPU.

Yo sé que muchos usuarios MongoDB han sido capaces de deshacerse de su ORM y su capa de almacenamiento en caché. modelo de datos de Mongo es mucho más cerca de los objetos con los que trabaja de tablas relacionales, así que por lo general puede simplemente almacenar directamente los objetos tal y como son, incluso si contienen listas de objetos anidados, como un blog con comentarios. Además, debido a mongo es lo suficientemente rápido para la mayoría de los sitios como está, puede evitar tratar las complejidades de almacenamiento en caché y en general ofrecer un sitio más en tiempo real. Por ejemplo, Wordnik.com informado 250 000 lecturas / seg y 100.000 inserciones / seg con un 1,2 TB / 5 mil millones objeto DB.

Hay algunas maneras de conectarse a MongoDB desde .Net, pero no tienen suficiente experiencia con esa plataforma saber cuál es el mejor:

exención de responsabilidad:. Yo trabajo para 10gen en MongoDB por lo que estoy un poco sesgada

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top