2010-05-20 340 views
135

NoSQL ha estado recibiendo mucha atención en nuestra industria recientemente. Estoy realmente interesado en los pensamientos de las personas sobre los mejores casos de uso para su uso sobre el almacenamiento de bases de datos relacionales. Lo que debería inducir a un desarrollador a pensar que determinados conjuntos de datos son más adecuados para una solución NoSQL. Estoy particularmente interesado en MongoDB y CouchDB ya que parecen estar obteniendo la mayor cobertura con respecto al desarrollo de PHP y ese es mi objetivo.Casos de uso para NoSQL

+6

Cassandra y MongoDB son productos completamente diferentes - categorías * completamente diferentes. Esta pregunta sería más fácil de responder si preguntara por casos de uso para un tipo de base de datos * específico * (OODB, DODB, DKVS, etc.) "NoSQL" es simplemente un término general para "cualquier cosa que no sea SQL" - podría ser algo como BerkleyDB o un montón de archivos planos en una red compartida. – Aaronaught

+0

@Aaronaught aprecio las diferencias, supongo que soy culpable de utilizar un término paraguas con nosql – robjmills

Respuesta

7

Lo que me gusta NoSQL no tiene nada que ver con el rendimiento y mucho que ver con la facilidad de uso. Las tiendas de documentos son simplemente más fáciles de usar cuando sus unidades de datos atómicos son similares a documentos, porque es trivial serializar hacia y desde los objetos. Es simplemente más divertido, y ese es un factor importante para proyectos personales o secundarios.

+1

No diría exactamente que es * trivial *, pero este es un buen punto sobre bases de datos orientadas a documentos. Lo contrario es verdad para algunos otros productos NoSQL: los DKVS tienden a ser * más difíciles * de mapear que los DB relacionales/SQL. – Aaronaught

79

Sólo prometer que nunca va a tratar de asignar una de datos relacional modelar a una base de datos NoSQL como MongoDB o CouchDB ... Este es el error más común que cometen los desarrolladores cuando evalúan la tecnología emergente.

Ese enfoque es similar a tomar un automóvil y tratar de usarlo para tirar de su carro por el camino como un caballo.

Es una reacción natural debido a la experiencia de todos, por supuesto, pero el valor real en el uso de una base de datos de documentos es que puede simplificar su modelo de datos y minimizar su sufrimiento como desarrollador. Su base de código se reducirá, sus errores serán menos y más fáciles de encontrar, el rendimiento será asombroso y la escala será mucho más simple.

Como fundador de Joomla soy parcial :-) pero viniendo del espacio de CMS, algo así como MongoDB es una bala de plata, ya que los mapas de contenido son muy naturales para documentar sistemas.

Otro gran caso para MongoDB es el análisis en tiempo real, ya que MongoDB tiene un rendimiento muy fuerte y una escala particularmente en cuanto a la concurrencia. Hay casos de estudio en el sitio web MongoDB.org que demuestran esos atributos.

Estoy de acuerdo con la noción de que cada base de datos tiene sus propios objetivos y casos de uso; tome el propósito de cada base de datos para la evaluación en consecuencia.

+1

verdaderamente bien dicho spacemonkey, estoy en la misma posición que seengee, claramente tenemos que pensar de una manera nueva y deberíamos preguntarnos cómo estructurar mis datos de aplicaciones en una estructura de documento, alejándome de la forma de pensar RDBMS cuando haz este análisis –

0

Para algunos casos de uso que necesita, especialmente para consultas analíticas que puede ejecutar consultas SQL en MongoDB con this wrapper desde Postgres.

0

Como ahora hay muchas más bases de datos NoSQL en el mercado que nunca, sugiero echar un vistazo al Magic Quadrant de Gartner si está buscando una base de datos que también sea ideal para aplicaciones empresariales basadas en soporte, capacidad de expansión , administración y costo.

http://www.gartner.com/technology/reprints.do?id=1-23A415Q&ct=141020&st=sb

me gustaría sugerir Couchbase a cualquier persona que no está probado todavía, pero no se basa en la versión que se muestra en el informe (2.5.1), ya que es casi 2 revisiones detrás de donde CB servidor es hoy, cerca del lanzamiento de 4.0 en 2H15.

http://www.couchbase.com/coming-in-couchbase-server-4-0

La otra parte sobre Couchbase como un vendedor/producto es que es un tipo multi-uso de DB. Puede actuar como una tienda de K/V pura, una base de datos orientada a documentos con escalado multidimensional, Memcached, caché a un lado con persistencia y admite SQL compatible con ANSI 92 con uniones automáticas, replicación en clústeres de DR con solo presionar un botón y incluso tiene un componente móvil incorporado en el ecosistema.

Si nada más, vale la pena echarle un vistazo a las últimas referencias:

http://info.couchbase.com/Benchmark_MongoDB_VS_CouchbaseServer_HPW_BM.html http://info.couchbase.com/NoSQL-Technical-Comparison-Report.html

2

Recomiendo esta charla por Martin Fowler:

https://www.youtube.com/watch?v=qI_g07C_Q5I

RESUMEN: Martin da una introducción rápida a las bases de datos NoSQL: de dónde provienen, la naturaleza de los modelos de datos que utilizan y la diferente forma en que debe pensar sobre la coherencia. A partir de esto, describe qué tipo de circunstancias debería considerar usarlas, por qué no convertirán obsoletas las bases de datos relacionales y la consecuencia importante de la persistencia políglota.

Dibuja una buena imagen de lo que es NoSQL, las diferentes categorías y las cosas que todos deben entender cuando provienen de las bases de datos relacionales del mundo. Saludos.

+0

Entendido, lo tendremos en cuenta para el futuro. – user3631881

2

Primero tiene que comprender CAP (Coherencia, Disponibilidad y Particionado, donde tiene que elegir dos de tres) la teoría y nuestro caso de uso Comercial. MongoDB cumple con la consistencia y el particionamiento & Couch DB satisface la disponibilidad & Particionado.

Los videos de Edureka en youtube con respecto a NoSQL son algunos de los mejores video tutoriales.

https://www.youtube.com/watch?v=gJFG04Sy6NY

https://www.youtube.com/watch?v=KSq6tMMXZ8s

https://www.youtube.com/watch?v=3z1KFA2qcSo

buenas presentaciones están disponibles en Slideshare.neta

http://www.slideshare.net/quipo/nosql-databases-why-what-and-when?qid=3bb9f7f6-a53d-41b1-8403-cd6f181d0ca7&v=qf1&b=&from_search=1

http://www.slideshare.net/EdurekaIN/no-sql-databases-35591065?qid=f1b9c095-6d70-4d0a-91da-1df664c4f389&v=qf1&b=&from_search=3 (Esta presentación es compatible con vídeo tutorial en youtube)

6

He estado usando NoSQL DBs desde hace un tiempo, y este es mi contribuyen al tema:

Un gran caso de uso para una base de datos NoSQL es una aplicación para estadísticas y/o informes generación, especialmente cuando los datos provienen de una fuente externa.

En una situación como la que una base de datos NoSQL puede ser un gran elección

Consideremos, por ejemplo, MongoDB:

Una vez que tenga sus datos en JSON, (que podría provenir de una tercera parte de la API, o exportarse desde un sql-aplicación) en MongoDB es bastante strightforward para importar y actualizar el JSON datos en la base de datos; por ejemplo, utilizando la línea de comandos mongoimport utilidad

En este punto es muy sencillo de construir consultas dinámicas con el filtrado y la agrupación, así que encaja con este tipo de aplicación.

Por ejemplo, utilizando el Aggregation Framework:

$pipeline = []; 

//filter by date 
$pipeline[] = [ '$match' => [ 'created_at' => [ '$gte' => $starDate, '$lte' => $endDate ] ] ]; 

//if we want to filter by a specific field, we add the filter to the pipeline array 
if($filters->isFilterByField()) 
    $pipeline[] = [ '$match' => [ 'field' => $fieldValue ] ];  

//group the results by date and get the count 
$pipeline[] = [ '$group' => [ '_id' => '$created_at', 'num_elements' => [ '$sum' => 1 ] ] ]; 

return $collection->aggretate($pipeline); 

me gustaría señalar la facilidad con la que podemos añadir dinámicamente /quitar filtros usando estructuras de datos php y evitar la tediosa concatenación de cadena para construir nuestras consultas. Con este enfoque añadir/quitar filtros dinamycally es tan fácil como añadir/quitar elementos de una matriz

Otra gran ventaja proviene del hecho de que una solución de este tipo es probable que sea más rápido de utilizar un base de datos relacional , donde tenemos que hacer que se une con diferentes tablas para obtener todos los datos que necesitamos

Además, este caso de uso es óptimo debido a evita todos los principales límites de una base de datos NoSQL:

  • La falta de transacciones: La aplicación no realiza la escritura pero sólo lee, por lo que no es necesario en absoluto transacciones

  • La falta de unión entre tablas: No necesitamos une, como podemos usar redundancy para almacenar nuestros datos desnormalizados en las colecciones. Como solo leemos datos, no necesitamos preocuparnos por sincronizar los datos desnormalizados entre las actualizaciones.

De esta manera podemos centrarnos en almacenar los datos con redundancia de manera que así se adapta a nuestras preguntas, que será el foco en colecciones individuales.

Sólo estoy escribiendo esto porque si lo hubiera leído algo así hace unos momentos, me habría sido ahorrado algo de tiempo para hacer investigaciones

Esperamos que sea útil a alguien