Lovefield, la base de datos relacional de Javascript

Posted by in Bases de datos, HTML5

Hoy vengo a hablaros de un proyecto de Google llamado Lovefield, y que se trata de una base de datos relacional implementada en Javascript para el desarrollo de webapps. He conocido de este proyecto gracias a la web de Google donde han publicado todos los códigos Open Source a los que contribuyen, que bien han desarrollado, o que están ya consolidados, y encima ordenados por categorias.

Aquí tienen a su creador explicando en qué consiste Lovefield (está en inglés):

Lovefield

El concepto detrás de Lovefield es aplicar modelos relacionales en aplicaciones web, cosa que facilita el trabajar con aplicaciones tanto conectado como desconectado (online y offline). La segunda característica es aplicar una API más simple que la base (indexDB), y que a su vez sea más similar a SQL tradicional de las bases de datos relacionales. Esta característica es fundamental para el mantenimiento de las webapps, pues las sentencias de IndexDB son bastante complejas. Además, el hecho de usar Lovefield tiene un extra, y es que evita las injecciones de código que pueden hacer saltar el sistema.

El sistema de consultas de Lovefield está diseñado no solo para consultas simples, sino también tiene elementos de gran complejidad, como agrupaciones (GROUP BY), ordenación, paginación (LIMIT), saltos (SKIP), lo que hace realmente potente a esta libreria. Las funciones principales de Lovefield son SELECT, INSERT, UPDATE y DELETE, además de COMMIT o ROLLBACK.

Lovefield también ha pensado en las uniones de tabla, y permite trabajar no solo con INNER JOINS, sino también con LEFT JOIN y RIGHT JOIN, lo que facilita el diseño de consultas SQL complejas con relativamente poco código (en contraste con IndexDB, que es mucho más complejo).

Además, está preparado para la parametrización de consultas, y para las “consultas observables”, de forma que si se modifica alguno de los elementos “que se están observables”, se ejecutarán eventos.

Otra característica importante son las transacciones, que actúan de igual forma que en los sistemas gestores de bases de datos relacionales. Está relacionado con la persistencia de datos: COMMIT y ROLLBACK!

Para finalizar, también implementa verificaciones de integridad (integrity checks), índices (b-tree), un optimizador de consultas (query optimizer) y un analizador de consultas (query analyzer).

Lovefield está pensada para los desarrolladores, evitar problemas de si está en un navegador o en otro, y que facilite la integración con las librerias más utilizadas en desarrollos web, como jQuery, Angular, …

Antes de continuar, vamos a conocer un poco más la base: IndexDB.

IndexDB

Lovefield trabaja usando IndexDB, que es una API del lado del cliente, para el almacenamiento de grandes cantidades de datos estructurados y para búsquedas de alto rendimiento en esos datos, usando índices. Sin embargo, IndexDB no es aún una tecnología madura y está poco implementada en proyectos, sobre todo porque no todos los navegadores la soportan, lo que dificulta la adopción de esta tecnología.

IndexDB, conceptualmente, está diseñada como una base de datos NoSQL (al estilo MongoDB) pero implementada en el cliente (esto es, en el navegador). Supone un avance en cuanto a almacenamiento respecto a las cookies, y tiene un concepto claro de base de datos respecto a localstorage o sesionstorage, pero aún así, cada navegador tiene limitaciones de almacenamiento (pero son mucho mayores que cookies y localstorage).

IndexDB está concebido para que dicha base de datos esté disponible aun sin conexión a Internet (offline), y que sea persistente, o sea, que cuando cierres el navegador los datos permanezcan disponibles para la siguiente sesión, y todo esto, sin necesidad de conectar con ningún servidor.

IndexDB trabaja sobre el concepto de colecciones de objetos (tablas en lenguaje relacional), definiendo un objeto como un structured clone algorithm (similar aJSON, pero con más opciones).

Pero no va más allá, por ejemplo, con integración de consultas con varias tablas (característica que sí nos aporta Lovefield).

Volviendo a IndexDB, en el tutorial preparado por Mozilla se puede aprender a usarla, y que a pesar de su extensión, también requiere bastante tiempo aprender a usarla. Por otro lado, también está disponible la documentación oficial de IndexDB.

Personalmente, nunca he usado IndexDB en ninguna de las aplicaciones que he realizado porque me ha parecido dificil de aprender, con una API realmente compleja, y donde las habilidades de Javascript no son básicos, sino más bien avanzadas. Si encima le añades que cada navegador ha desarrollado su propio objeto, la cosa se complica más. Lovefield se hace necesario para evitar estos problemas!

Por contra, con el uso de localstorage he conseguido almacenar aquella información necesaria para mantener de una sesión a la siguiente, sin tanta complejidad. De ahí que no haya investigado más sobre IndexDB.

Para la siguiente entrega, vamos a poner los teclados a funcionar y ver cómo trabajar con Lovefield!

Happy coding!

Google+ Comments - Comentarios Google+