2011-09-26 12 views
5

Estoy usando PHP para desarrollar aplicaciones web. He usado MySQL como mi RDMS. Para muchas cosas, un RDMS funciona, y muchos problemas se pueden resolver mediante la normalización, entre otras cosas. Pero algunas situaciones simplemente no funcionan bien con un RDMS, por lo que se han diseñado otras soluciones como NoSQL.¿Debo usar NoSQL en lugar de MySQL?

Lo que no está claro para mí es qué situaciones serían mejor para NoSQL. ¿Cómo difieren algunas de las diferentes opciones de NoSQL, qué situaciones uno puede ser mejor que otro, y cuáles son compatibles con PHP 5.3 o superior (API sabio)?

Así que estoy buscando una lista de software de servidor NoSQL que pueda usar (como MySQL como RDMS) y por qué usaría uno sobre el otro (¿algún híbrido?). También ejemplos específicos de problemas que se resuelven mediante el uso de NoSQL en lugar de un RDMS.

Por último, me gustaría saber si un servidor NoSQL funcionaría mejor en esta situación:

una tabla de datos donde cada fila puede tener diferentes columnas/campos. Una fila puede tener 5 columnas, otra podría tener 5 columnas completamente diferentes, y otra podría tener 10. Pero de todas estas filas, hay una única ID numérica autoincrementada principal. Millones de "filas".

(Solo con lo anterior asumo que NoSQL es perfecto, ya que es una colección de objetos, no filas en una tabla. No estoy seguro acerca de la tecla principal A.I).

En un RDMS, puede crear las columnas que sean más utilizadas, luego use serialize/unserialize de PHP para almacenar otras columnas. Pero esto es muy ineficiente y complica las cosas cuando tiene que ejecutar informes en columnas que existen en este " serie serializada ", como una SUM en todas las filas de una columna llamada" birthday_pledge "(con cada fila donde se usa).

En mi situación cada "columna", que no sea la clave principal, es personalizada y definida por el usuario. Pero necesito poder ejecutar informes (sumas, filtros, búsquedas) en estas "columnas". Entonces, si NoSQL no es la solución, lo único que se me ocurre es crear tablas personalizadas para el usuario (aunque eso puede complicarse).

También quiero señalar que la escalabilidad (múltiples servidores de bases de datos, redundancia y conmutación por error) es muy importante.

+0

Mira aquí: http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis – zerkms

+0

Sugeriría que un modelo de datos relacionales para los datos que describes probablemente involucre múltiples tablas que coincidan con los datos de diferentes tipos por ID. En un sentido muy general (que no recomendaría usar directamente), podría tener una tabla 'integer_values',' text_values', etc. que están asociadas a los elementos por su clave principal. –

+0

Actualmente usamos una tabla generalizada que es 'id',' text', pero la tabla tiene millones de filas y es imposible informar sobre ella. Estoy considerando hacer que la aplicación cree tablas personalizadas, a menos que NoSQL sea una mejor solución para RDMS para nuestra situación. – Luke

Respuesta

1

http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis

En este artículo se compara la mayoría de Populars NoSQL sistema de base de datos y theire pro/contra.

Espero que te pueda ayudar.

PD: En mi idea, lo que estás buscando es couchdb o mongodb, pero puedo equivocarme.

+1

Sería genial si incluyesen más en la lista. También encontré esta [guía visual] (http://blog.nahurst.com/visual-guide-to-nosql-systems) que ayuda mucho. También este [sitio] (http: // nosql-database.org /) tiene una lista completa de bases de datos NoSQL. – Luke

Cuestiones relacionadas