ventajas una relacional que estructura ejemplos desventajas datos consultas caracteristicas mysql mongodb

mysql - una - ¿Cuándo usar MongoDB u otros sistemas de bases de datos orientados a documentos?



que es una base de datos no relacional (11)

para almacenar estos datos no estructurados

Como dijo, MongoDB es el más adecuado para almacenar datos no estructurados. Y esto puede organizar sus datos en formato de documento. Estas alternativas RDBMS denominadas almacenes de datos NoSQL ( MongoDB , CouchDB , Voldemort ) son muy útiles para aplicaciones que se amplían de forma masiva y requieren un acceso más rápido a los datos de estos almacenes de big data.

Y la implementación de estas bases de datos es más simple que el RDBMS regular. Dado que se trata de objetos binarios simples con valores clave o de estilo de documento directamente serializados en el disco. Estos almacenes de datos no imponen las propiedades de ACID y ningún esquema . Esto no proporciona ninguna habilidad de transacción . Así que esto puede escalar a gran escala y podemos lograr un acceso más rápido (tanto de lectura como de escritura)

Pero en contraste, RDBM impone ACID y esquemas en los datos. Si desea trabajar con datos estructurados, puede seguir adelante con RDBM.

Elegiría MySQL para crear foros para este tipo de cosas. Porque esto no va a escalar a lo grande. Y esta es una aplicación muy simple (común) que tiene relaciones estructuradas entre los datos.

Ofrecemos una plataforma para clips de video y audio, fotos y gráficos vectoriales. Comenzamos con MySQL como base de datos de la base de datos y recientemente incluimos MongoDB para almacenar toda la metainformación de los archivos, ya que MongoDB cumple con los requisitos. Por ejemplo: las fotos pueden tener información Exif , los videos pueden tener pistas de audio donde también queremos almacenar la metainformación. Los videos y los gráficos vectoriales no comparten ninguna metainformación común, etc., así que sé que MongoDB es perfecto para almacenar estos datos no estructurados y mantenerlos en un lugar de búsqueda.

Sin embargo, seguimos desarrollando nuestra plataforma y añadiendo funcionalidades. Ahora, uno de los siguientes pasos será proporcionar un foro para nuestros usuarios. La pregunta que surge ahora es: ¿usar la base de datos MySQL, que sería una buena opción para almacenar foros y publicaciones en foros, etc. o usar MongoDB para esto también?

Entonces la pregunta es: cuándo usar MongoDB y cuándo usar un RDBMS. ¿Qué tomaría, mongoDB o MySQL, si tuviera la opción y por qué lo tomaría?


¿Quién necesita foros distribuidos, fragmentados? Tal vez Facebook, pero a menos que esté creando un competidor de Facebook, solo use Mysql, Postgres o lo que sea que le resulte más cómodo. Si quieres probar MongoDB, está bien, pero no esperes que haga magia por ti. Tendrá sus peculiaridades y su maldad en general, al igual que todo lo demás, como estoy seguro de que ya ha descubierto si realmente ya ha estado trabajando en ello.

Claro, MongoDB puede ser promocionado y parece fácil en la superficie, pero se encontrará con problemas que los productos más maduros ya han superado. No se deje engañar tan fácilmente, sino que espere hasta que "nosql" madure o muera.

Personalmente, creo que "nosql" se marchitará y morirá por fragmentación, ya que no hay estándares establecidos (casi por definición). Así que no apostaré personalmente por ningún proyecto a largo plazo.

Lo único que puede guardar "nosql" en mi libro, es si puede integrarse en Ruby o en lenguajes similares a la perfección, y hacer que el lenguaje sea "persistente", casi sin ningún gasto general en codificación y diseño. Eso puede suceder, pero esperaré hasta entonces, no ahora, Y, por supuesto, debe ser más maduro.

Por cierto, ¿por qué estás creando un foro desde cero? Hay toneladas de foros de código abierto que se pueden modificar para adaptarse a la mayoría de los requisitos, a menos que realmente estés creando la próxima generación de foros (lo cual dudo).


Como dije anteriormente, puedes elegir entre muchas opciones, mira todas esas opciones: http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis

Lo que sugiero es encontrar la mejor combinación: MySQL + Memcache es realmente genial si necesita ACID y desea unirse a algunas tablas. MongoDB + Redis es perfecto para el almacén de documentos. Neo4J es perfecto para la base de datos de gráficos.

Lo que hago: comienzo con MySQl + Memcache porque estoy acostumbrado a hacerlo, luego comienzo a usar el marco de base de datos de otros. ¡En un solo proyecto, puede combinar MySQL y MongoDB por ejemplo!


Después de asistir a Devoxx 2011 y asistir a una presentación de 10Gen, escribí un pequeño blog en el que se comparan MongoDB con las bases de datos RDBMS. MongoDB es uno de los dbs populares de Nosql. Por favor ver más abajo:

haga clic aquí


Después de dos años utilizando MongoDb para una aplicación social, he sido testigo de lo que realmente significa vivir sin un RDBMS de SQL.

  1. Terminas escribiendo trabajos para hacer cosas como unir datos de diferentes tablas / colecciones, algo que un RDBMS haría por ti automáticamente.
  2. Sus capacidades de consulta con NoSQL están drásticamente paralizadas. MongoDb puede ser lo más parecido a SQL, pero todavía está muy lejos. Créeme. Las consultas SQL son super intuitivas, flexibles y potentes. Las consultas de MongoDb no lo son.
  3. Las consultas de MongoDb pueden recuperar datos de una sola colección y aprovechar solo un índice. Y MongoDb es probablemente una de las bases de datos NoSQL más flexibles. En muchos casos, esto significa más viajes de ida y vuelta al servidor para encontrar registros relacionados. Y luego comienza a normalizar los datos, lo que significa trabajos en segundo plano.
  4. El hecho de que no sea una base de datos relacional significa que no tendrá restricciones de clave foránea (pensadas por algunos como malas) para asegurar que sus datos sean consistentes. Le aseguro que esto creará inconsistencias de datos en su base de datos. Estar preparado. Lo más probable es que comience a escribir procesos o verificaciones para mantener su base de datos consistente, lo que probablemente no funcionará mejor que dejar que RDBMS lo haga por usted.
  5. Olvídate de marcos maduros como hibernar.

Creo que el 98% de todos los proyectos probablemente son mucho mejores con un típico RDBMS de SQL que con NoSQL.


En NoSQL: si solo fuera así de fácil , el autor escribe sobre MongoDB:

MongoDB no es un almacén de clave / valor, es un poco más. Definitivamente tampoco es un RDBMS. No he usado MongoDB en producción, pero lo he hecho un poco para crear una aplicación de prueba y es un kit muy bueno. Parece ser muy eficaz y tiene, o tendrá pronto, tolerancia a fallos y fragmentación automática (también conocida como escala). Creo que Mongo podría ser lo más parecido a un reemplazo RDBMS que he visto hasta ahora. No funcionará para todos los conjuntos de datos y patrones de acceso, pero está diseñado para tus cosas típicas de CRUD. Almacenar lo que es esencialmente un enorme hash, y poder seleccionar cualquiera de esas claves, es para lo que la mayoría de la gente usa una base de datos relacional. Si tu base de datos es 3NF y no haces ninguna combinación (solo estás seleccionando un montón de tablas y juntando todos los objetos, también conocido como lo que hace la mayoría de las personas en una aplicación web), MongoDB probablemente te ayude.

Luego, en la conclusión:

Lo que es importante señalar es que si se le impide hacer algo realmente genial porque no puede elegir una base de datos, lo está haciendo mal. Si conoces mysql, solo úsalo. Optimice cuando realmente lo necesite. Úsalo como una tienda de kk / v, úsalo como un rdbms, pero por el amor de Dios, ¡construye tu aplicación asesina! Nada de esto importará a la mayoría de las aplicaciones. Facebook todavía usa MySQL, mucho. Wikipedia usa MySQL, mucho. FriendFeed usa MySQL, mucho. NoSQL es una gran herramienta, pero ciertamente no va a ser su ventaja competitiva, no va a hacer que su aplicación sea atractiva y, sobre todo, a sus usuarios no les importará nada de esto.

¿En qué voy a construir mi próxima aplicación? Probablemente los postgres. ¿Usaré NoSQL? Tal vez. También podría usar Hadoop y Hive. Podría guardar todo en archivos planos. Tal vez voy a empezar a piratear Maglev. Usaré lo que sea mejor para el trabajo. Si necesito informes, no usaré ningún NoSQL. Si necesito el almacenamiento en caché, probablemente use Tokyo Tyrant. Si necesito ACIDity, no usaré NoSQL. Si necesito un montón de contadores, usaré Redis. Si necesito transacciones, usaré Postgres. Si tengo una tonelada de un solo tipo de documentos, probablemente usaré Mongo. Si necesito escribir mil millones de objetos al día, probablemente usaría Voldemort. Si necesito una búsqueda de texto completo, probablemente use Solr. Si necesito una búsqueda de texto completo de datos volátiles, probablemente use Sphinx.

Me gusta este artículo, me parece muy informativo, ofrece una buena visión general del panorama y exageración de NoSQL. Pero, y esa es la parte más importante, realmente ayuda hacerse las preguntas correctas cuando se trata de elegir entre RDBMS y NoSQL. Vale la pena la lectura en mi humilde opinión.

Enlace alternativo al artículo


He visto que muchas empresas están utilizando MongoDB para el análisis en tiempo real de los registros de aplicaciones. Su esquema no se ajusta realmente a los registros de aplicaciones, donde el esquema de registro tiende a cambiar de tiempo a tiempo. Además, su función de recopilación limitada es útil porque purga automáticamente los datos antiguos para mantenerlos en la memoria.

Esa es una área en la que realmente creo que se adapta MongoDB, pero MySQL / PostgreSQL es más recomendado en general. Hay una gran cantidad de documentación y recursos para desarrolladores en la web, así como su funcionalidad y robustez.


Las 2 razones principales por las que puede preferir preferir Mongo son

  • Flexibilidad en el diseño de esquemas (almacén de documentos tipo JSON).
  • Escalabilidad: simplemente agregue nodos y se puede escalar horizontalmente bastante bien.

Es adecuado para aplicaciones de big data. RDBMS no es bueno para big data.


Tenga en cuenta que Mongo esencialmente almacena JSON. Si su aplicación está tratando con una gran cantidad de objetos JS (con anidación) y desea conservar estos objetos, existe un argumento muy fuerte para usar Mongo. Hace que sus capas DAL y MVC sean ultra delgadas, ya que no están desempaquetando todas las propiedades del objeto JS e intentan adaptarlas a una estructura (esquema) en la que no encajan naturalmente.

Tenemos un sistema que tiene varios Objetos JS complejos en su corazón, y amamos a Mongo porque podemos persistir de todo realmente, muy fácilmente. Nuestros objetos también son bastante amorfos y desestructurados, y Mongo absorbe esa complicación sin parpadear. Tenemos una capa de informes personalizada que descifra los datos amorfos para el consumo humano, y eso no fue tan difícil de desarrollar.


Ya sabes, todo esto sobre las uniones y las ''transacciones complejas'', pero fue el mismo Monty quien, hace muchos años, explicó la "necesidad" de COMPROMISO / ROLLBACK, diciendo que ''todo lo que se hace en las clases de lógica (y no la base de datos) de todos modos ''- así que es lo mismo una y otra vez. Lo que se necesita es un tonto pero increíblemente ordenado y rápido motor de recuperación / almacenamiento de datos, para el 99% de lo que hacen las aplicaciones web.


Yo diría que use un RDBMS si necesita transacciones complejas. De lo contrario, optaría por MongoDB: es más flexible para trabajar y sabes que puede escalar cuando sea necesario. (Aunque soy parcial, trabajo en el proyecto MongoDB)