El mejor código que puedes programar es el que mejor puedan entender los demás.- Rafael Hernampérez
Reflexiones, artículos, opiniones, recomendaciones, noticias... sobre la tecnología.
domingo, 31 de mayo de 2020
miércoles, 6 de mayo de 2020
Utiliza bases de datos en tus proyectos web sin servidores
¿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).
Una vez descargado, en nuestro código HTML, importamos la librería:
/ Una vez importado, el motor de EFEMem DB entra en funcionamiento. Si hubo datos persistidos, automáticamente se cargarán estos para su uso.
Si no se especifica un nombre de espacio, asumirá el espacio
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:
Si se produjese un error, la respuesta de cualquier comando de EFEMem DB sería la siguiente:
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
El resultado de este comando retorna un array o lista con todas las claves encontradas:
Imagen original en pxfuel: https://www.pxfuel.com/en/free-photo-elhvj
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íaefememdb.js
, que contiene todo el motor de la base de datos. Se encuentra en el repositorio Github: https://github.com/efememdb/EFEMemDBUna 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 comandoset()
. 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 comandoget()
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 comandosset()
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 otrodelete()
: Elimina claves en los espacios indicadosget()
: Recupera claves y valores de los espacios indicadosgetConfig()
: Recupera el valor de un parámetro de configuracióninfo()
: Muestra la información sobre el uso de EFEMemDBkeys()
: Retorna las claves definidas en los espacios indicadosmemory()
: Muestra la memoria utilizada por las claves de los espacios indicadosmove()
: Mueve claves de un espacio a otropersist()
: Guarda o persiste los datos actualesrename()
: Cambia el nombre de una claverestore()
: Carga o recupera los datos persistidosset()
: Guarda una clave en un espaciosetConfig()
: Crea o modifica un parámetro de configuraciónspaceInfo()
: Muestra la información de un espacio dadospaces()
: Retorna la lista de espacios utilizados
Enlaces de interés
- Repositorio Github del proyecto: https://github.com/efememdb/EFEMemDB
- Introducción a EFEMem DB: https://github.com/efememdb/EFEMemDB/blob/master/README.md
- Documentación de EFEMem DB: https://github.com/efememdb/EFEMemDB/tree/master/docs
- Ejemplos de EFEMem DB: https://github.com/efememdb/EFEMemDB/tree/master/examples
Suscribirse a:
Entradas (Atom)