¿Imaginas poder usar una base de datos en tu web de forma exclusiva y sin necesidad de hacer llamadas remotas, como una API?
EFEMem DB es una base de datos NoSQL ultra ligera, rápida, sencilla y eficiente, basada en clave-valor, que se ejecuta enteramente en memoria. Está enteramente escrita en JavaScript, y se puede ejecutar directamente en el front-end, a través de páginas web, aplicaciones PWA (Progressive Web Applications) o aplicaciones móviles híbridas (desarrolladas con Ionic, React Native, Nativescript, Xamarin, etc).
Casos de uso
¿Cuáles son los escenarios ideales para usar una base de datos en un proyecto web?. He aquí algunos casos:
- Pérdida conexión. Tu aplicación puede seguir funcionando cuando no tienes conectividad con el servidor. Cuando recuperes la conexión, puedes volcar toda la información recopilada al servidor. Esta característica asegura la alta disponibilidad de tu aplicación.
- Juegos HTML. Los datos de las partidas se guardan en cada navegador o dispositivo.
- Datos de sesión de usuario
- Datos exclusivos de la aplicación web
- Datos de configuración. Permite cambios "en caliente", eliminando la característica de datos estáticos.
- Monitorización de datos. Puedes, por ejemplo, conectar tus dispositivos IoT a tu web, y almacenar un rango fijo de datos cíclicos (por ejemplo, las últimas 24 horas).
- Datos caché de uso frecuente
- Datos maestros
Características principales
Los puntos fuertes de
EFEMem DB son los siguientes:
- NoSQL. Olvídate de la complejidad de relaciones de tablas o esquemas estrictos. Utiliza pares de clave-valor.
- Acceso ultra-rápido de lectura y escritura (unos pocos nanosegundos)
- No requiere de instalación en un servidor ni de un canal de sockets. Es una librería JavaScript que trabaja directamente con los datos.
- Configuración en caliente. Puedes cambiar la configuración sin reiniciar el motor de base de datos.
- Modo de datos reciclados. Mediante este modo se puede configurar un máximo de claves. Cuando se alcanza este límite, el siguiente dato se guardará tras eliminar, automáticamente, la cave más antigua.
- Datos con tiempo de vida. Puedes guardar un dato que expire en un tiempo concreto (expresado en segundos).
- Comandos poderosos. Puedes gestionar tus datos mediante unos pocos y sencillos comandos.
- Persistencia. Puedes guardar los datos de forma permanente. Para ello, utiliza localStorage y restaurarlo al iniciar la base de datos o cuando quieras.
- Espacios. Puedes organizar tus claves mediante espacios. Esto permite tener claves con el mismo nombre y distinto valor, en diferentes espacios. También ayuda a localizar e identificar las claves.
- Patrones de nombre. Puedes buscar y acceder de forma eficiente a multitud de espacios y claves utilizando patrones de nombre, en lugar de acceder uno a uno.
- Riqueza de tipos de datos. Puedes usar números enteros o reales, cadenas de texto, valores booleanos, arrays u objetos JSON
Comandos básicos
Lo mejor para entender cómo funciona
EFEMem DB es el ejemplo.
Importar la librería
Lo primero es descargar la librería
efememdb.js
, que contiene todo el motor de la base de datos. Se encuentra en el repositorio Github:
https://github.com/efememdb/EFEMemDB
Una vez descargado, en nuestro código HTML, importamos la librería:
<SCRIPT src="[/path/]efememdb.js"></SCRIPT>
/
Una vez importado, el motor de
EFEMem DB entra en funcionamiento. Si hubo datos persistidos, automáticamente se cargarán estos para su uso.
Guardar datos con set()
Comencemos con el comando
set()
. Este comando guarda una clave y su valor:
<SCRIPT>
var result = efemem.set("saludo", "Hola Mundo");
</SCRIPT>
Si no se especifica un nombre de espacio, asumirá el espacio
'public'
por defecto.
Si el espacio y la clave no existen, se creará esta nueva clave en dicho espacio. Si ya existía previamente el espacio y la clave, el valor de ésta se actualizará con el nuevo valor.
El resultado de este comando sería el siguiente:
{
"ok":true,
"cmd":"set(key, value[,space[,due]])",
"data":{
"key":"saludo",
"space":"public",
"value":"Hola Mundo",
"due":"9999-12-31T22:59:59.000Z"
},
"msg":"Key 'saludo' saved successfully in space 'public'",
"affected":1,
"time":"< 1 ms"
}
Si se produjese un error, la respuesta de cualquier comando de
EFEMem DB sería la siguiente:
{
"ok":false,
"msg":"[mensaje de error]",
}
Recuperar datos con get()
El comando
get()
permite recuperar datos a través de la clave:
<SCRIPT>
result = efemem.get("saludo");
</SCRIPT>
Si no se especifica un nombre de espacio, por defecto todos los espacios existentes. Lo mismo ocurre si no se especifica un nombre de clave. El comando
get()
(al igual que otros comandos), utilizan patrones de nombre para referirse a un espacio o a una clave. El nombre que se pase, se tomará como "parte del nombre". Es decir, que la cadena de caracteres especificada se utilizará como parte del nombre, ya sea al principio, en el medio o al final, muy similar a los patrones o comodines utilizados en un sistema operativo. Si se especifica un patrón
'al'
, es como si se especificara
'*al*'
, con lo que buscaría cualquier nombre que empiece por
'al'
, termine en
'al'
o que contenga
'al'
en cualquier parte del nombre.
El resultado de este comando retorna un array o lista con todas las claves encontradas:
{
"ok":true,
"cmd":"get(key[,space])",
"data":[
{"key":"public~saludo","value":"Hola Mundo"}
],
"msg":"1 values found",
"affected":1,
"time":"1 ms"
}
Lista de comandos
Los comandos
set()
y
get()
son los comandos más básicos y utilizados de
EFEMem DB. Pero tienes a tu disposición un conjunto de comandos que te ayudarán a gestionar de forma eficiente tu base de datos:
copy()
: Copia claves de un espacio a otro
delete()
: Elimina claves en los espacios indicados
get()
: Recupera claves y valores de los espacios indicados
getConfig()
: Recupera el valor de un parámetro de configuración
info()
: Muestra la información sobre el uso de EFEMemDB
keys()
: Retorna las claves definidas en los espacios indicados
memory()
: Muestra la memoria utilizada por las claves de los espacios indicados
move()
: Mueve claves de un espacio a otro
persist()
: Guarda o persiste los datos actuales
rename()
: Cambia el nombre de una clave
restore()
: Carga o recupera los datos persistidos
set()
: Guarda una clave en un espacio
setConfig()
: Crea o modifica un parámetro de configuración
spaceInfo()
: Muestra la información de un espacio dado
spaces()
: Retorna la lista de espacios utilizados
Enlaces de interés
Imagen original en pxfuel: https://www.pxfuel.com/en/free-photo-elhvj