2012-05-11 39 views
172

Con todo el bombo, parece realmente difícil encontrar información confiable sobre cuándo usar esto. Así que planteo las siguientes preguntas, y lo siento si estas son realmente preguntas tontas por adelantado:Escenarios de casos de uso de NoSQL o CUÁNDO usar NoSQL

  1. ¿Debo usar NoSQL para los datos del usuario? P.ej. perfiles, nombres de usuario + contraseñas, etc.
  2. ¿Debo usar NoSQL para contenido importante? P.ej. artículos, entradas de blog, inventario de productos, etc.

Supongo que no? Y siento que NoSQL es solo para cosas rápidamente accesibles de las cuales está bien perder datos. Pero también leí que las aplicaciones NoSQL tienen redundancia incorporada para que no pierda datos.

Además, si los 2 ejemplos anteriores son malos, ¿podría darme casos específicos de uso empresarial en los que utilizaría NoSQL? Veo muchas descripciones generales pero no muchos ejemplos del mundo real. Lo único que se me ocurre es mensajería y análisis de usuario a usuario.

Gracias!

+0

Recientemente escribí dos publicaciones en el blog que pueden ayudarlo a tomar mejores decisiones. Una es sobre qué tipo de cosas buscar si está considerando cambiar a NoSQL como MongoDB y el otro compara el uso del espacio de disco entre MySQL y MongoDB, lo que en sí mismo podría afectar el rendimiento si el servidor en el que está alojada la base de datos no tiene suficiente RAM Puede ver estos artículos aquí: http://blog.trackerbird.com/content/mongodb-performance-pitfalls-behind-the-scenes y aquí: http://blog.trackerbird.com/content/mysql-vs-mongodb -disk-space-usage – Cliff

+0

Gran pregunta hecha de la manera incorrecta. – Shimmy

Respuesta

130

Realmente es una pregunta "depende". Algunos generales puntos:

  • NoSQL suele ser bueno para datos no estructurados/"sin esquema" - por lo general, no se necesitan para definir explícitamente el esquema en la delantera y solo pueden incluir nuevos campos sin ninguna ceremonia
  • NoSQL normalmente favorece un esquema denormalizado debido a que no admite JOINs por el mundo RDBMS. Por lo tanto, normalmente tendrías una representación aplanada y desnormalizada de tus datos.
  • El uso de NoSQL no significa que pueda perder datos. Diferentes DB tienen diferentes estrategias. p.ej. MongoDB: básicamente puede elegir qué nivel intercambiar el rendimiento frente a la posibilidad de pérdida de datos; el mejor rendimiento = mayor alcance para la pérdida de datos.
  • A menudo es muy fácil escalar las soluciones NoSQL. Agregar más nodos para replicar datos es una forma de a) ofrecer más escalabilidad yb) ofrecer más protección contra la pérdida de datos si un nodo deja de funcionar. Pero, de nuevo, depende de la configuración/DB NoSQL. NoSQL no significa necesariamente "pérdida de datos" como usted deduce.
  • En mi humilde opinión, las consultas/informes complejos/dinámicos se realizan mejor desde un RDBMS. A menudo, la funcionalidad de consulta para un DB NoSQL es limitada.
  • No tiene que ser una 1 o la otra opción. Mi experiencia ha sido el uso de RDBMS junto con NoSQL para ciertos casos de uso.
  • Los DB NoSQL a menudo carecen de la capacidad de realizar operaciones atómicas en múltiples "tablas".

Realmente necesita ver y comprender cuáles son los distintos tipos de tiendas NoSQL, y cómo proporcionan seguridad/seguridad de datos, etc. Es difícil dar una respuesta general, ya que realmente son todos diferentes y abordar las cosas de manera diferente.

Para MongoDb como ejemplo, revisa su Use Cases para ver lo que sugieren como usos "bien adaptados" y "menos adecuados" de MongoDb.

+4

La afirmación de que NoSQL no admite uniones es engañosa. Algunas bases de datos NoSQL son mucho mejores en las uniones que las bases de datos relacionales. Algunos no los admiten en absoluto. Esta respuesta parece ser más sobre MongoDB en particular que sobre NoSQL en general. –

+1

Gran resumen. @AlanPlum, ¿a qué bases de datos específicas de NoSQL se refiere? – brian

+0

@brian Soy colaborador de ArangoDB (https://www.arangodb.com/), que es una combinación de una base de datos de documentos (piense en MongoDB) y una base de datos de gráficos (piense en Neo4J) no solo con combinaciones baratas sino también transacciones reales. Dicho esto, las bases de datos NoSQL no son un grupo homogéneo y es imposible generalizar desde una base de datos NoSQL a toda la "categoría". –

8

creo NoSQL es "más adecuada" en estos escenarios por lo menos (más adicional es bienvenido)

  1. fácil de escalar con sólo añadir más nodos.

  2. consulta en grandes conjuntos de datos

    Imagínese toneladas de tweets publicados en Twitter todos los días. En RDMS, podría haber tablas con millones (¿o miles de millones?) De filas, y no desea hacer consultas directas sobre esas tablas, ni siquiera mencionar, la mayoría de las veces, las uniones de tablas también son necesarias para consultas complejas.

  3. /S de disco cuello de botella

    Si un sitio web tiene que enviar los resultados a los diferentes usuarios sobre la base de información en tiempo real de los usuarios, es probable que estemos hablando de decenas o cientos de miles de SQL solicitudes de lectura/escritura por segundo. Entonces disco i/o será un serio cuello de botella.

+14

No entiendo lo que podría ser un problema con RDBMS para # 2. Y NoSQL tiene menos E/S de disco según # 3? – avi

+4

Como dice @avi, creo que no hay problema para el n. ° 2 siempre que consulte las tablas sobre el índice. Millones de filas? Ok, recupere solo los índices que quiero usar –

+6

# 2 y 3 son ambos falsos. Para 2, hice pruebas de rendimiento en la importación/exportación de datos y vi a SQL Server 2014 aplastar a Mongo en grandes importaciones y exportaciones de datos. Para 3, los datos fuertemente tipados en SQL generalmente toman (he visto más del 50% antes de la compresión) mucho menos espacio que las bases de datos de documentos. – brian