lunes, 29 de noviembre de 2010

¿Debertía MongoDB utilizar SQL como lenguaje de consulta?

MongoDB no utiliza SQL como lenguaje de consulta. ¿Por qué no?. Es una buena pregunta y en el proyecto hemos discutido sobre ello durante mucho tiempo. Existen razones para ello.

Dada la naturaleza del almacenamiento orientado a documento, si hiciéramos SQL, el mundo sería una variante, no SQL verdadero. No habría joins, y podríamos necesitar extensiones para gestionar las construcciones anidadas construídas y envueltas elegantemente en el almacenamiento JSON. Estas extensiones no harían mucho y necesitaríamos algo como la notación punto de MongoDB para alcanzar los objetos internos, algo quizá como lo siguiente:

SELECT * FROM users WHERE addr.state = ‘NY’

Para alcanzar los arrays también lo necesitaríamos:

SELECT * FROM posts WHERE comments[].author = ‘fred’

En Mongo, la sintaxis de consulta JSON de arriba, simplemente sería:

{ “comments.author” : “fred” }

El término NoSQL es un poco impreciso - estamos realmente hablando sobre escalabilidad horizontal en almacenamiento postrelacional, no sobre el lenguaje SQL. Debería considerarse la Google App Engine Data Store NoSQL, y utilizar el lenguaje de consulta GQL, similar a SQL.

La principal razón por la decisión que tomamos con el lenguaje de consulta - representando consultas como JSON - era normalizar los datos con el mecanismo de consulta tal como los almacenamos. Si estás almacenando JSON en la base de datos, ¿no podemos representar las consultas de la misma manera? Pensamos que tiene sentido.

Nunca he sido un fan de embeber un lenguaje de programación en otro. Construir cadenas SQL dinámicamente me pareció siempre un poco extraño. Prefiero representar las consultas de un modo conducido a datos.

Fuente: http://blog.mongodb.org/post/447761175/should-mongodb-use-sql-as-a-query-language