Software de almacenamiento de datos: ¿Cómo aprovechar al máximo el potencial de Redis?

Software de almacenamiento de datos: ¿Cómo aprovechar al máximo el potencial de Redis?

Uno de nuestros programadores se vio en la necesidad de trabajar con Redis, que es un software de almacenamiento de datos que no utiliza el formato clásico de tablas y columnas, sino que permite usar y almacenar datos de diversa índole, para ser accedidos mediante una Llave. 

Redis, en jerga técnica un Key-Value Storage, tiene soporte para listas de datos, sets -que no permiten datos duplicados-, sets ordenados -que permiten darle un puntaje a un cierto dato, y usar ese puntaje para realizar diversas operaciones- e incluso estructuras simples llamadas Hashes, entre otras cosas.

Lo primero que uno descubre cuando comienza a trabajar con este tipo de bases de datos no-tradicionalmente-estructuradas, es que el NOMBRE de los Key son críticos, y que es importante conocer qué operaciones son de alta velocidad, o sea, O(1). A ese parámetro se lo denomina Time Complexity, y cada uno de los comandos Redis indica ese factor, por ejemplo, GET o SET son O(1) mientras que SINTER -que permite realizar una intersección de dos sets- es O(N*M) donde N es la cantidad de elementos del set más pequeño y M la cantidad de sets involucrados en la operación. Por tanto, podemos evaluar que tan bien pensado está un software que usa Redis analizando la distribución de complejidad de uso del tiempo, deseando O(1) para el 100%.

Otra funcionalidad muy útil de Redis es la de poder darle una fecha de expiración a un cierto Key. Por ejemplo, podríamos armar un software de manejo de sesiones usando un nombre de key por ejemplo SESSION_{UserId} que almacenará el valor de id de sesión. Y podríamos establecer que dicho key expire dentro de 10 minutos. Este concepto de volatilidad está muy bien implementado en Redis, y se lo puede comenzar a estudiar aquí.

Nuestro programador, Arturo, necesitó implementar expiración pero a nivel datos, y no a nivel Keys. Hoy queremos compartir con ustedes un poco del código implementado, dado que no hay ejemplos en la web para otros lenguajes, y nada para Python. El código es una clase denominada DeadSet (en honor tanto a la funcionalidad implementada, expiración de items en Sets redis, pero también por un jugador profesional del juego Diablo 3 de la empresa Blizzard de quien nuestro programador es fan). Veamos un ejemplo de uso:

import redis
import datetime
from deadset import DeadSet

r = redis.StrictRedis(...)
expDate = datetime.timedelta(days=7)
dsetkey = "DEAD_IN_A_WEEK"

datakey = "THIS_HOLDS_DATA"
data = {"a": 4, "b": 2}
dset = DeadSet(keyname=dsetkey,
               default_expire=expDate,
               rdb=r)
dset.add_expiring_item(itemId=datakey, itemdata=data)

En el ejemplo, se trabaja en el key DEAD_IN_A_WEEK, al que se le agrega un item con un nombre "THIS_HOLDS_DATA", que a su vez se convertirá en un key de tipo Redis Hash que almacenará la información de la variable data (a=4, b=2). Tanto el item como el key expirarán automáticamente dentro de siete días, gracias a que podemos especificar la expiración mediante un python timedelta. Esto significa que podemos convertir operaciones O(N) que son costosas en cuanto a tiempo, en operaciones inmediatas O(1), con expiración automática como valor agregado, logrando así optimizar nuestro software. Pueden acceder a la clase DeadSet en nuestro repositorio git: en esta direccion.

Fraudes en sistemas de pagos on line: tu información personal  vale mucho más de lo que creés

Fraudes en sistemas de pagos on line: tu información personal vale mucho más de lo que creés

¡Ábrete sésamo! Los usos de la biometría aplicada a la seguridad informática

¡Ábrete sésamo! Los usos de la biometría aplicada a la seguridad informática