Recientemente he utilizado MongoDB por primera vez y pareció excepcionalmente fácil de usar y de alto rendimiento. Lo que lleva a mi pregunta – ¿por qué no MongoDB?

Digamos que estoy implementando un Q & a Una aplicación. Mi enfoque sería para aplicar los datos de Usuario en una base de datos MySQL y, a continuación, utilizar MongoDB para la pregunta y la respuesta de almacenamiento – una colección de almacenar una pregunta y todas las respuestas.

Hay nada malo con este enfoque?

  • Me gusta MongoDB. Por qué no usar la misma para todos sus datos?;)
  • Esto es lo que estoy consiguiendo. ¿Hay alguna desventaja para mí hacer eso? Por qué no puedo utilizar únicamente MongoDb? No debe ser un inconveniente en algún lugar.
  • Honestamente, probablemente, usted puede mantener los Datos de Usuario en MongoDB así. Francamente, si quería volver a construir Desbordamiento de Pila en MongoDB, probablemente funcionaría bastante bien.
  • ¿Cuál es su caso? ¿Quiere mostrar todas las respuestas a una pregunta en particular? O todas las respuestas por parte de un usuario en particular? O cuántas respuestas, en promedio, cada cliente recibe a sus preguntas? Si un usuario elimina su cuenta, ¿desea eliminar todas las preguntas y respuestas publicadas? O simplemente respuestas? O simplemente preguntas?

8 Comentarios

  1. 33

    MongoDB suena como una magnífica aplicación para su problema, pero hay un montón de razones por las que no la usaría.

    MongoDB no sería muy adecuado para aplicaciones que necesitan:

    1. Multi-Objeto de las Transacciones: MongoDB sólo admite transacciones ACID para un solo documento.
    2. SQL: SQL es bien conocido y mucha gente sabe cómo escribir consultas muy complejas para hacer un montón de cosas. Este conocimiento es transferible a través de una gran cantidad de implementaciones de donde MongoDB las consultas del lenguaje específicos.
    3. ÁCIDO fuerte garantías: MongoDB permite cosas como inconsistente lee lo que está bien en algunas aplicaciones, pero no en todos.
    4. BI tradicional: UN montón de herramientas muy potentes que permiten que para OLAP y otros fuertes que las aplicaciones de BI y los ejecute en contra de la tradicional base de datos SQL.
    • ¿Qué significa «multi-objeto de las transacciones» significa? Ellos mencionan no usar mongoDB con que tipo de aplicación aquí. A continuación, afirma "MongoDB does not provide ACID transactions.", es esta info acerca de ÁCIDO transacción para un único documento de edad?
    • «Multi-objeto» significa más de un registro. En un ÁCIDO SQL DB puede hacer una transacción y insertar varias cosas en una sola tabla (o muchas cosas en muchas tablas). MongoDB soporta «ÁCIDO» para un único almacén de documentos, no de varios documentos en una sola lista o entre listas múltiples. Esta es una limitación importante para algunos problemas.
    • Con respecto a 4. Mientras que es correcto, para obtener lo mejor de OLAP normalmente tiene que construir un almacén de datos, que generalmente es un de-normalizado strucutre, y la bomba de datos de su sistema transaccional mediante un proceso de ETL. Así que si usted está construyendo un sistema BI estoy de acuerdo en que usted no desea utilizar MongoDB (supongo), pero que no impedirá utilizar MongoDB para sus datos transaccionales (como la pregunta parece indicar) y, a continuación, ETL sus documentos a un OLAP-diseñado SQL tradicional de la tienda para hacer tu BI analysis contra.
    • MongoDB actualmente no no soporte de transacciones ACID, incluso para un solo documento, contrariamente a lo que su documentación dice: aphyr.com/posts/322-jepsen-mongodb-stale-reads
  2. 19

    MongoDB es una excelente base de datos y disfruto con ello. Que dijo, tiene un par de errores si usted viene desde el mundo de SQL.

    Aparte de ÁCIDO y otras cosas que están bien documentados (y en otras respuestas demasiado), estas cosas nos pilló por sorpresa:

    • MongoDB espera que se tenga memoria. Mucha memoria. Si usted no puede caber su trabajo conjunto en la memoria, usted puede olvidarse de él. Esto es diferente de la mayoría de los relacionales DBs que el uso de la memoria como memoria caché!
      Para ser más específicos: MongoDB usa la memoria RAM como almacenamiento principal y «swaps» las partes no necesarias con el disco (Mongo deja la decisión sobre los cuales las partes se «intercambian» para el núcleo). RDBMS tradicional de trabajo de la otra manera – que el uso de disco como almacenamiento principal y el uso de la memoria RAM como mecanismo de almacenamiento en caché. Así que en general MongoDB utiliza más memoria RAM. Esto no es una cosa mala por sí misma, sino como una consecuencia «real» consumo de RAM es difícil de predecir, lo que puede conducir a graves e inesperadas degradación de rendimiento una vez que el conjunto de trabajo crece sobre la (difícil de predecir) límite.

    • de almacenamiento no auto-retráctil cuando se retire de los registros. El espacio que se asigna por la colección permanece asignada hasta que repair DB o caída de la colección. Y es asignado en grandes trozos en un nivel de DB (archivos de datos), que luego son asignados a las colecciones cuando sea necesario (extensiones). Dicho esto, dentro de la colección, el espacio asignado a los documentos que se eliminan liberan de su espacio para que otros documentos de la misma colección. Esta es una buena explicación de conceptos: http://www.10gen.com/presentations/storage-engine-internals

    • como un contraste a SQL que se analiza en el lado del servidor, en Mongo pasar las estructuras de datos para la consulta y la BASURA de las funciones. La consecuencia es que cada controlador proporciona una sintaxis diferente, que es un poco molesto. Por ejemplo, PyMongo utiliza una lista de tuplas en lugar de un diccionario (probablemente porque diccionario en Python no se conserva el orden de las teclas) para especificar qué campos van a ser devueltos por find(): (para ser justos, que probablemente era el único cuerdo manera de hacerlo -, pero es una consecuencia de la no utilización de cadena basados en el lenguaje tales como SQL)
      • Shell de MongoDB: db.test.find({}, {a:1})
      • PyMongo: db.find({}, fields=[(a,1,)]

    Esto no debe ser visto como una crítica de MongoDB – disfruto con ella y ha demostrado ser fiable y eficiente herramienta. Pero para usarlo correctamente, usted necesita aprender acerca de su manejo del espacio.

    • Fuiste el único para las uñas de uno de los mayores límites impuestos rodea MongoDB, los requisitos de memoria. Mongo continuará el trabajo si no tiene suficiente memoria RAM para almacenar los datos y los índices para usted «trabajo conjunto» de todos a la vez, pero el rendimiento se degrada severamente. Esta es una bastante limitante restricción ya que no es difícil para una base de datos rápidamente superando la cantidad de RAM de la mayoría de los equipos tienen.
    • MongoDB todos los datos no se carga en la RAM física, sino que utiliza la memoria virtual no RAM para todos los datos, sólo algunos de los datos se cargan en la memoria RAM, por lo que su 1er argumento no es válido. Marque esta mongodb.com/presentations/storage-engine-internals
    • Sé que utiliza memoria virtual, que era mi punto. La memoria Virtual todavía reside en la RAM (si tienes suerte) o más lento en los medios de comunicación (si no estás). Así que cuando parte de ella se «intercambian» (uso comillas porque esto no es real de intercambio, pero el proceso y las desventajas son muy similares), se obtiene una penalización de rendimiento. Realmente no hay manera alrededor de ella realmente – la diferencia aquí es que MongoDB deja la decisión acerca de qué «swap» para el núcleo, mientras que otros DBs manejar esto por sí mismo que puede ser mejor ya que el DB tiene más dominio de los conocimientos acerca de los datos.
    • Pero creo que otras dbs sólo específico de la carga de consulta de datos en la memoria RAM y el resto siempre va a residir en la memoria Virtual, mientras que Mongo db intentará cargar más datos que otros dbs. Así que en ese caso va a ser más eficientes que otros. Lo yousay @johndodo bro.
  3. 8

    Posibles desventajas:

    1. Trabaja en una organización que se ha utilizado únicamente SQL bases de datos relacionales. Usted no tiene la aprobación o el soporte para el uso de una base de datos NoSQL todavía.
    2. Usted nunca ha administrado un MongoDB clúster; hay una curva de aprendizaje, como con todas las tecnologías.
    3. Sus datos son realmente relacional (por ejemplo, un Usuario tiene muchas Preguntas; una Pregunta que tiene muchas Respuestas), y que has pasado por alto la posibilidad.

    MondoDB es una buena solución, una buena alternativa para aquellas situaciones donde se aplica. Si se puede usar, ¿por qué no?

    • Mi solución para el punto tres es tener una tabla de Preguntas que sólo contiene el resumen de los datos (que se lo pedía, su título). Cada MongoDB colección es nombrado por el id de la pregunta. Me gusta especialmente que MongoDB tiendas de documentos JSON así que en lugar de tirar de datos MySQL, empujando en un JSON-codificado de la matriz y se envía a través del cable, me pueden quitar y enviar.
    • JSON es un plus aquí. No estoy argumentando en contra de su elección, respondiendo a su deseo de escuchar desventajas.
    • Con respecto a 3., MongoDB puede tener documento de relación. Su mucho más fácil la consulta de relaciones en SQL.
  4. 4

    @johndodo en el uso de memoria.
    Dicen oficial de la página de preguntas frecuentes que:

    Hace MongoDB requieren una gran cantidad de memoria RAM?

    No necesariamente. Es ciertamente posible ejecutar MongoDB en una máquina
    con una pequeña cantidad de memoria RAM libre. MongoDB utiliza automáticamente todo gratis
    de memoria en la máquina como su caché. Recursos del sistema de monitores muestran que
    MongoDB utiliza una gran cantidad de memoria, pero su uso es dinámico. Si otro
    proceso de repente las necesidades de la mitad de la del servidor de RAM, MongoDB producirá
    la memoria caché para el otro proceso.

    Técnicamente, el sistema operativo del subsistema de memoria virtual gestiona
    MongoDB es la memoria. Esto significa que MongoDB va a usar como la cantidad de memoria libre
    como puede, el intercambio de disco según sea necesario. Implementaciones con suficiente memoria
    para adaptarse a la aplicación de trabajo conjunto de datos en la memoria RAM va a alcanzar el mejor
    rendimiento.

    Así que creo que, la curva de aprendizaje es la respuesta. La mejor conoce la tecnología – el mejor sistema.

    • Estoy de acuerdo, una vez que sabes la DB funciona perfectamente. Ese era el punto de mi respuesta. 😉 He actualizado mi respuesta, para ser más específicos acerca de la RAM restricciones.
    • ¿Mongo debe ser desplegada en seperated pyshical de la máquina?
  5. 3

    He estado trabajando en varias bd de SQL y sistemas basados después de 3+ años de mongodb(con Rieles mongoid conductor) tengo tres razones principales.

    • No tengo la necesidad de unir las tablas, por lo que su más rápido. La mayoría del tiempo un documento que contiene todo lo que necesitas, si no, puedo recuperar el documento – de nuevo muy rápido.
    • Puedo recuperar el documento una vez, a continuación, el mapa de la matriz/json para recopilar datos y realizar operaciones. Así que el acceso a la DB menos y porque asignación/recogida sucede en su memoria mucho más rápido. Esto se hace aún más eficiente al utilizar los documentos incrustados.
    • Puedo hacer a los clientes a definir sus propios campos de forma fácil y eficiente. No vale la pena tratar de SQL DB.
  6. 2

    No puedo encontrar la razón de no poner todos los datos de los usuarios de la información. a q & a en MongoDB, excepto una razón práctica:

    En el entorno de hosting compartido, no es fácil encontrar un proveedor de servicios de oferta de MongoDB hosting. A diferencia de mySql, se convertirá en el estándar de plan de hosting.

  7. 2

    Añadir a los comentarios de otros dado; decidir sobre un almacén de datos (SQL o NoSQL) puede depender mucho de la replicación de los requisitos que usted tiene.

    MongoDB sigue un MySQL-esque amo-esclavo-esclavo-* (1 master, varios esclavos) de configuración. SÓLO se puede escribir para el maestro.

    En un distribuidas geográficamente sistema, este puede ser inaceptable (usted necesita para ser capaz de escribir en cualquier dominar y tener los servidores conciliar).

    En aquellos casos en los servidores, como Cassandra, Riak, CouchDB será mejor en esas situaciones.

    Todo lo que se dice, si MySQL es un buen ajuste para su aplicación y desea trabajar con NoSQL, Mongo es la solución perfecta.

  8. 0

    Al decidir la base de datos para mi proyecto he oído que mongoDB es libre, entonces pensé ¿por qué no mongoDB?

    Bien, Sólo para estar más seguro de que me llama la MongoDB Equipo de Soporte al Cliente.
    Existen tres tipos diferentes de la versión de MongoDB como por ahora.

    1. Servidor De La Comunidad
    2. Profesional
    3. Empresa

    Realidad servidor de la Comunidad es libre de y los otros 2 son de software de pago.

    Me preguntó el chico-

    Dónde puedo usar el Servidor de la Comunidad de mongodb?

    Debajo de la respuesta que he recibido a través de Correo electrónico-

    Servidor de la comunidad del uso Sugerido es para el entorno de desarrollo. Para la producción de propósito
    Empresa que ofrece es necesaria.

    Por favor, asegúrese antes de usar la versión.

    Con la esperanza de que esto le ayudará 🙂

    • Esto no abordar la cuestión en todos (a menos que usted está tratando de dar a entender que MonogoDB equipo de soporte al cliente son mentirosos tratando de engañar a la gente a gastar dinero en su producto por lo que nunca se debe utilizar).
    • Yo estaba tratando de transmitir como si usted está pensando en MongoDB, a continuación, elija la versión sabiamente… Quería añadir algo más de información.. sin Embargo yo tiene su punto. Gracias por su opinión, apreciado 🙂

Dejar respuesta

Please enter your comment!
Please enter your name here