1. Información general
Las bases de datos en memoria dependen de la memoria del sistema en lugar del espacio en disco para el almacenamiento de datos. Debido a que el acceso a la memoria es más rápido que el acceso al disco, estas bases de datos son naturalmente más rápidas.
Por supuesto, solo podemos usar una base de datos en memoria en aplicaciones y escenarios donde los datos no necesitan ser persistentes o con el propósito de ejecutar pruebas más rápido. A menudo se ejecutan como bases de datos integradas, lo que significa que se crean cuando se inicia un proceso y se descartan cuando finaliza el proceso, lo cual es muy cómodo para realizar pruebas porque no es necesario configurar una base de datos externa.
En las siguientes secciones, veremos algunas de las bases de datos en memoria más utilizadas para el entorno Java y la configuración necesaria para cada una de ellas .
2. Base de datos H2
H2 es una base de datos de código abierto escrita en Java que admite SQL estándar tanto para bases de datos integradas como independientes. Es muy rápido y está contenido en un JAR de solo 1,5 MB.
2.1. Dependencia de Maven
Para usar bases de datos H2 en una aplicación, necesitamos agregar la siguiente dependencia:
com.h2database h2 1.4.194
La última versión de la base de datos H2 se puede descargar desde Maven Central.
2.2. Configuración
Para conectarnos a una base de datos H2 en memoria, podemos usar una cadena de conexión con el protocolo mem, seguida del nombre de la base de datos. Las propiedades driverClassName, URL, nombre de usuario y contraseña se pueden colocar en un archivo .properties para que nuestra aplicación las lea:
driverClassName=org.h2.Driver url=jdbc:h2:mem:myDb;DB_CLOSE_DELAY=-1 username=sa password=sa
Estas propiedades aseguran que la base de datos myDb se cree automáticamente al iniciar la aplicación.
De forma predeterminada, cuando se cierra una conexión a la base de datos, la base de datos también se cierra. Si queremos que la base de datos dure tanto tiempo como la JVM se esté ejecutando, podemos especificar la propiedad DB_CLOSE_DELAY = -1
Si usamos la base de datos con Hibernate, también necesitamos especificar el dialecto de Hibernate:
hibernate.dialect=org.hibernate.dialect.H2Dialect
La base de datos H2 se mantiene periódicamente y proporciona una documentación más detallada en h2database.com.
3. HSQLDB ( base de datos HyperSQL )
HSQLDB es un proyecto de código abierto, también escrito en Java, que representa una base de datos relacional. Sigue los estándares SQL y JDBC y admite funciones de SQL como procedimientos almacenados y desencadenadores.
Se puede usar en el modo en memoria o se puede configurar para usar almacenamiento en disco.
3.1. Dependencia de Maven
Para desarrollar una aplicación usando HSQLDB , necesitamos la dependencia de Maven:
org.hsqldb hsqldb 2.3.4
Puede encontrar la última versión de HSQLDB en Maven Central.
3.2. Configuración
Las propiedades de conexión que necesitamos tienen el siguiente formato:
driverClassName=org.hsqldb.jdbc.JDBCDriver url=jdbc:hsqldb:mem:myDb username=sa password=sa
Esto asegura que la base de datos se creará automáticamente al inicio, residirá en la memoria durante la aplicación y se eliminará cuando finalice el proceso.
La propiedad del dialecto de Hibernate para HSQLDB es:
hibernate.dialect=org.hibernate.dialect.HSQLDialect
El archivo JAR también contiene un administrador de base de datos con una GUI. Puede encontrar más información en el sitio web hsqldb.org.
4. Base de datos Apache Derby
Apache Derby es otro proyecto de código abierto que contiene un sistema de gestión de bases de datos relacionales creado por Apache Software Foundation .
Derby se basa en los estándares SQL y JDBC y se utiliza principalmente como una base de datos integrada, pero también se puede ejecutar en modo cliente-servidor mediante el marco de Derby Network Server .
4.1. Dependencia de Maven
Para usar una base de datos Derby en una aplicación, necesitamos agregar la siguiente dependencia de Maven:
org.apache.derby derby 10.13.1.1
La última versión de la base de datos Derby se puede encontrar en Maven Central.
4.2. Configuración
La cadena de conexión usa el protocolo de memoria :
driverClassName=org.apache.derby.jdbc.EmbeddedDriver url=jdbc:derby:memory:myDb;create=true username=sa password=sa
Para que la base de datos se cree automáticamente al inicio, tenemos que especificar create = true en la cadena de conexión. La base de datos se cierra y se descarta de forma predeterminada al salir de JVM.
Si usamos la base de datos con Hibernate , necesitamos definir el dialecto:
hibernate.dialect=org.hibernate.dialect.DerbyDialect
Puede leer más sobre la base de datos de Derby en db.apache.org/derby.
5. Base de datos SQLite
SQLite es una base de datos SQL que se ejecuta solo en modo incrustado, ya sea en memoria o guardada como un archivo. Está escrito en lenguaje C, pero también se puede usar con Java.
5.1. Dependencia de Maven
Para usar una base de datos SQLite , necesitamos agregar el JAR del controlador JDBC:
org.xerial sqlite-jdbc 3.16.1
La dependencia sqlite-jdbc se puede descargar desde Maven Central.
5.2. Configuración
Las propiedades de conexión utilizan la clase de controlador org.sqlite.JDBC y el protocolo de memoria para la cadena de conexión:
driverClassName=org.sqlite.JDBC url=jdbc:sqlite:memory:myDb username=sa password=sa
Esto creará la base de datos myDb automáticamente si no existe.
Actualmente, Hibernate no proporciona un dialecto para SQLite , aunque es muy probable que lo haga en el futuro. Si desea utilizar SQLite con Hibernate , debe crear su clase HibernateDialect .
Para obtener más información sobre SQLite , visite sqlite.org.
6. Bases de datos en memoria en Spring Boot
Spring Boot facilita especialmente el uso de una base de datos en memoria, ya que puede crear la configuración automáticamente para H2 , HSQLDB y Derby .
Todo lo que necesitamos hacer para usar una base de datos de uno de los tres tipos en Spring Boot es agregar su dependencia al pom.xml . Cuando el marco encuentra la dependencia en la ruta de clases, configurará la base de datos automáticamente.
7. Conclusión
En este artículo, echamos un vistazo rápido a las bases de datos en memoria más utilizadas en el ecosistema de Java, junto con sus configuraciones básicas. Aunque son útiles para realizar pruebas, tenga en cuenta que en muchos casos no proporcionan exactamente la misma funcionalidad que los originales independientes.
Puede encontrar los ejemplos de código utilizados en este artículo en Github.