AjKeyvs Implementando KeyValue Store en C# (1) El Proyecto

Quería implementar un key-value store (como Redis) en C#, para ensayar algunas estructuras de datos y practicar TDD (Test-Driven Development). El proyecto que inicié es:

https://github.com/ajlopez/AjKeyvs

La estructura actual del proyecto:

Hay un proyecto de librería de clases, AjKeyvs, que contiene las colecciones que manejo en un repositorio. Lo interesante para este proyecto es implementar arreglos y conjuntos que puedan ser “sparse”, es decir que puedan tener claves muy diferentes. Ejemplo, tener una clave 1 (entero uno), y una clave 1000000 (entero un millon) y no tener que reservar un millon de lugares en el “arreglo”, sino solamente reservar lo que se usa. Y también tener un buen tiempo de acceso y modificación. Otras veces tendré claves String, con jerarquía, tipo “user”, “user:1”, “user:1:email”, etc. Y también quiero acceder rápidamente a ese tipo de estructura. Hay casos de uso que implican implementar conjuntos (con unión, intersección, etc), y en el caso de ser los elementos enteros, he implementado un conjunto donde prendo o apago un bit, de acuerdo a si el elemento correspondiente está o no está en el conjunto. Pero ya vendrá más detalle en próximos posts.

Si bien esa librería se puede usar in-process, también estuve armando un servidor, y un programa cliente. El servidor escucha y procesa comandos que le envían los clientes, enviándolos al repositorio de colecciones. Todas las colecciones se guardan en memoria. El tema persistencia me parece ortogonal a estos casos de uso. Veré si lo adoso a los comandos, o queda a responsabilidad del consumidor.

Y como es usual, hay un proyecto con los tests que fui armando siguiendo el flujo de trabajo de TDD.

Próximos temas: estructuras de datos, colecciones, comandos, concurrencia, etc.

Nos leemos!

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

This entry was posted in 13239, 1389, 15035, 18477, 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>