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
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
public async Task<IEnumerable<T>> Get() { var items = await BlobCache.UserAccount.GetAllObjects<T>(); return items; }
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.
public async Task<bool> Add(T item, string id) { try { await BlobCache.UserAccount.InsertObject<T>(id, item); return true; } catch (System.Exception) { return false; } }
Con esta sencilla instrucción habremos almacenado los datos aunque, evidentemente deberíamos hacer un mejor control de las excepciones.
Hasta aquí llega esta introducción a Akavache que espero que os haya gustado.
Enjoy coding!!