Algunos proyectos con modelo en memoria

Ya saben que soy un “fan” de los modelos (de dominio) en memoria, claro, cuando el contexto lo justifica. Veo que  hay muchos problemas que tendrían una mejor solución si nos olvidamos por un tiempo del “cliché” “usa la base de datos, Luke!”. La base de datos debe aparecer evolutivamente. Y en muchos casos, no se necesita, más que como persistencia, no como lugar al que ir a operar en cada comando de negocio. Por ejemplo, hay muchos proyectos y aplicaciones reales que usan Redis, que usando un solo “thread” termina implementando un completo y poderoso “key-value store” en memoria, con opciones de persistencia (Redis Cluster todavía está en desarrollo).

Estoy divirtiéndome implementando ideas en mis proyectos personales, usando un modelo en memoria. Ver:

SimpleMemolap: Una especie de modelo OLAP multidimensional, con los datos a explorar residiendo en memoria. Escrito en JavaScript/Node.js, tiene un ejemplo web simple.

Memolap: Otro tipo OLAP multidimensional, pero esta vez en C#. Vean que el ejemplo web sigue en progreso (me salió más rápido el de Node.js).

SimplePermissions: Subjects, Roles, Permissions, Contexts, todo en memoria. Ideal para mantener las autorizaciones por usuario, aplicación, país, etc.

AjKeyvs: Una especie de Redis, en C#, en memoria. Tengo que implementar un protocolo cliente, y un servidor correspondiente. Por ahora, es una librería, que se puede usar local in-process. Me gustó implementar los algoritmos internos, con TDD, puedo mejorarlos, tengo todo listo para hacer refactor en cualquier momento.

SimpleStore: Algo parecido, un Redis en memoria, un “key-value store”, pero en JavaScript/Node.js. Trabaja local in-process, pero puedo exponerlo hacia afuera (remoto) usando otros módulos: quiero hacer “dog fooding” de otros proyectos míos.

SimpleQueue: Implementación en memoria, de una cola, en JavaScript/Node.js. Puedo usarla en el mismo proceso o exponerla hacia afuera, igual que comenté arriba.

SimpleTags: En mi sitio personal, coleccionaba items (páginas, enlaces, …) agrupados por categoría. Luego de ver otros sistemas (notablemente Gmail) veo que es muy útil, en lugar de poner los items en carpetas, simplemente asociarles “tags”. Este proyecto maneja items, con datos arbitrarios, asociados a uno o más tags (simples strings o key-value, ver la página de ejemplos). Escrito en JavaScript/Node.js)

Podría incluir también a SimpleRules: un motor de reglas donde los hechos residen en memoria (muchos motores de reglas usan directamente la memoria para representar el estado del mundo).

Y hasta podría mencionar: SimpleBoggle, donde la lista de palabras para resolver un juego/tablero de Boggle se carga en memoria.

Todavía por comenzar:

SimpleDatabase: base de datos en memoria, con un lenguaje de consultas tipo SQL, escrito en JavaScript/Node.js.

Muchos de estos proyectos podrían extenderse para tener persistencia “enchufable”. Pero por ahora estoy interesado en tener algo andando, para mostrar cómo puede usarse en distintas situaciones. Me gusta bastante implementar los algoritmos internos, árboles, búsqueda, índices invertidos, etc. Y todo eso, haciendo TDD a cada paso.

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

This entry was posted in 14005, 15035, 15550, 5374. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>