Hace algún tiempo tuve una conversación por Twitter con los grandes Lluis Franco y Josue Yeray en la que discutíamos sobre cómo almacenar datos en aplicaciones móviles y, después de un par de mensajes sobre SQLite, apareció el nombre de Akavache, basada en la anterior pero que aporta algunas ventajas importantes.

¿Qué es Akavache?

Tal y como lo describen sus creadores, Akavache es un “motor” de almacenamiento “clave-valor”, asíncrono y persistente, basado en SQLite3 creado para aplicaciones tanto de escritorio como móviles que nos permite almacenar tanto datos importantes persistentes como datos locales cacheados que deben expirar.

A simple vista, la primera ventaja que tiene Akavache es la posibilidad de escribir datos de manera asíncrona, cosa que en aplicaciones móviles es muy importante y necesario además de que dispone de Akavache Explorer, que nos permite ver los datos almacenados de una forma muy simple.

Además, Akavache es multiplataforma con lo que podremos usarlo en nuestras aplicaciones con Xamarin para iOS y Android.

Instalando Akavache en Apps UWP

Podemos instalarlo desde Nuget de una forma muy sencilla. Buscamos Akavache y seleccionamos la primera opción

Akavache-Nuget

Stores disponibles con Akavache

Para usar Akavache, debemos usar el objeto BlobCache que nos permitirá realizar todas las operaciones necesarias. Este objeto expone de varias formas de interactuar con los datos. Por defecto, al establecer el nombre de la aplicación BlobCache.ApplicationName la información se alojará en %LocalAppData%\[ApplicationName] y, en el caso de una aplicación de escritorio, en %AppData%\[ApplicationName]

  • Por usuario: BlobCache.UserAccount con SQLite. Es usada para compartir entre diferentes máquinas.
  • Por máquina: BlobCache.LocalMachine con SQL en la máquina local
  • Securizada: BlobCache.Secure encriptada con SQLite
  • En memoria: BlobCache.InMemory es volátil y se libera en cada reinicio

Obtener datos

Con unas pocas líneas de código obtendremos nuestros objetos serializados de forma sencilla

[sourcecode language=”csharp”]
public async Task<IEnumerable<T>> Get()
{
var items = await BlobCache.UserAccount.GetAllObjects<T>();
return items;
}
[/sourcecode]

Akavache-List

Ejemplo guardando datos

Guardar datos se hace de una forma muy simple gracias a los métodos expuestos por Akavache. En este ejemplo usaré UserAccount como destino del guardado de los datos.

[sourcecode language=”csharp” padlinenumbers=”true”]
public async Task<bool> Add(T item, string id)
{
try
{
await BlobCache.UserAccount.InsertObject<T>(id, item);
return true;
}
catch (System.Exception)
{
return false;
}
}
[/sourcecode]

Con esta sencilla instrucción habremos almacenado los datos aunque, evidentemente deberíamos hacer un mejor control de las excepciones.

Akavache-List-After-Insert

 

Hasta aquí llega esta introducción a Akavache que espero que os haya gustado.

Enjoy coding!!