ventajas desventajas sql database nosql couchdb mapreduce

desventajas - mongodb vs sql server



¿Cómo traducir de SQL a NoSQL/MapReduce? (1)

Tengo experiencia trabajando con bases de datos relacionales, pero recientemente comencé a incursionar en CouchDB y me sorprendió cómo algunas operaciones no relacionales, que serían simples en SQL, no eran funciones de primera clase en CouchDB.

Le agradecería que se tomara un momento para mapear cada declaración SQL a continuación en su equivalente de MapReduce.

SELECT COUNT(*) FROM products WHERE price < 20.00; SELECT category, SUM(price) FROM products GROUP BY category; UPDATE products SET price = 19.99 WHERE price = 20.00; DELETE FROM products WHERE expires_at <= NOW();


Los comandos SELECT son bastante fáciles. Las grabaciones masivas son un poco más complicadas. En general, usará alguna vista para recuperar los documentos que deben modificarse, luego usará la API _bulk_docs para enviar todos los cambios a la vez.

Además, consulte la documentación relacionada con las vistas para obtener detalles sobre cómo realizar consultas. Esto incluye ordenar, agrupar, etc.

SELECT COUNT(*) FROM products WHERE price < 20.00;

Mapa

function (doc) { if (doc.price < 20) { emit(doc.price); } }

Reducir

_count

Si necesita que esto funcione con una cantidad arbitraria, no solo 20, deberá emitir el precio en todos los casos, y usar la startkey y la endkey de endkey para restringir su conjunto de resultados.

SELECT category, SUM(price) FROM products GROUP BY category;

Mapa

function (doc) { emit(doc.category, doc.price); }

Reducir

_sum

Esta función de mapa utiliza esencialmente la categoría como la clave, con el precio como el valor en su par clave / valor. La función de reducción sumará los precios de cada clave diferente.

UPDATE products SET price = 19.99 WHERE price = 20.00;

Mapa

function (doc) { if (doc.price == 20) { emit(doc.price); } }

Una vez que su aplicación extrae el contenido de esta vista, realizará todas las manipulaciones en el código de su aplicación y luego enviará los resultados a la base de datos a través de la API _bulk_docs .

DELETE FROM products WHERE expires_at <= NOW();

Mapa

function (doc) { emit(doc.expires_at); }

Dependiendo de cómo almacene sus valores de fecha y hora, es posible que necesite ajustar la función de mapa así como su consulta a la vista. Usar una marca de tiempo (JS usa milisegundos en lugar de segundos) es probablemente la forma más rápida de lograr esto. Una vez que haya configurado su consulta, agregará un nuevo campo a cada uno de estos documentos. _deleted: true . Una vez que envíe esta lista nuevamente a la base de datos (nuevamente con _bulk_docs ) se _bulk_docs todos los documentos especificados.