Garnet, el sistema NoSQL de Microsoft ya es de código abierto
Microsoft dio a conocer hace poco su decisión de liberar Garnet, su sistema de gestión de bases de datos NoSQL, como código abierto. Este sistema NoSQL está enfocado en la creación de almacenes de almacenamiento en caché y compatible con bibliotecas cliente existentes para el almacenamiento de Redis.
Garnet permite la creación de clústeres de almacenamiento en caché escalables que admiten replicación, migración de claves y fragmentación de datos entre nodos del clúster. El motor Tsavorite es utilizado para almacenar datos en Garnet (una bifurcación del almacenamiento MÁS RÁPIDO de Microsoft).
Con el código abierto de Garnet, esperamos permitir que la comunidad de desarrolladores se beneficie de sus mejoras de rendimiento y capacidades, aprovechar nuestro trabajo y expandir el ecosistema de Garnet agregando nuevas funciones y llamadas API. También esperamos que el código abierto fomente la investigación académica de seguimiento y abra futuras oportunidades de colaboración en esta importante área de investigación.
Sobre Garnet
La arquitectura de Garnet separa la lógica para analizar y procesar solicitudes de las operaciones de almacenamiento y los datos se almacenan utilizando dos almacenes clave-valor basados en la biblioteca Tsavorite.
El primer almacén, «principal», está optimizado para operaciones rápidas de cadenas, mientras que el segundo almacén, «de objetos», está optimizado para manejar objetos complejos y tipos de datos avanzados como hashes y listas. Los tipos de datos en el segundo almacenamiento se implementan mediante bibliotecas .NET. Los datos se almacenan en el montón (montón C#), lo que permite actualizarlos de manera eficiente y serializada en el disco.
Tsavorite admite el procesamiento de consultas multiproceso, transacciones, confirmación de cambios en un modo sin bloqueo (puntos de control), recuperación de fallas, almacenamiento de copias redundantes y mantenimiento de un registro de operaciones.
El controlador de red en Garnet se basa en la arquitectura de memoria compartida propuesta por el proyecto de investigación ShadowFax . El procesamiento TLS y la interacción con el almacenamiento se realizan en un solo subproceso para evitar la sobrecarga de cambiar de subproceso y utilizar de manera más eficiente la memoria caché de la CPU al transferir datos a través de la red.
El sistema NoSQL Garnet presenta una serie de características destacadas que lo hacen versátil y eficiente para diversas aplicaciones de almacenamiento y manipulación, ya que permite el almacenamiento de varios niveles al implementar almacenamiento en RAM, unidades SSD y almacenamiento en la nube, optimizando la distribución de datos según su demanda para crear cachés eficientes.
Además de ello, cuenta con soporte de dispositivos extensible, pues ofrece capas optimizadas para funcionar con diferentes tipos de dispositivos, como SSD, discos duros y almacenamiento en la nube de Azure Storage.
También cuenta con soporte para diferentes tipos de datos, ya que permite almacenar valores de cadena y estructuras de datos complejas como listas, hashes, conjuntos, listas ordenadas y datos de geolocalización, con capacidad para definir la vida útil de las claves.
De las demás características que se destacan de Garnet:
- Evita la fragmentación y garantiza una gestión eficaz del espacio liberado en la RAM.
- Permite establecer límites configurables en el tamaño de la memoria utilizada para índices, registros y almacenamiento de objetos, adaptándose a las necesidades del sistema.
- Facilita el acceso al almacenamiento utilizando clientes Redis sin modificaciones adicionales.
- Ofrece una API para realizar consultas analíticas, transacciones y utilizar el paradigma de publicación/suscripción, brindando flexibilidad en la manipulación de datos.
- Proporciona medios para establecer políticas de control de acceso vía ACL de manera flexible.
- Permite definir la configuración del sistema de almacenamiento en formatos comunes y accesibles.
- Ofrece soporte para conectar controladores de red adicionales y cifrar el tráfico mediante TLS, garantizando la seguridad de los datos.
- Permite crear extensiones en C# para implementar operaciones adicionales con cadenas y objetos, ofreciendo flexibilidad y extensibilidad.
- Incluye soporte para procedimientos almacenados transaccionales, restauración desde puntos de control, modo AOF (archivo de solo agregar) y capacidad para crear clústeres de almacenamiento con replicación, fragmentación y recuperación de nodos fallidos.
- Ofrece un rendimiento superior y baja latencia al procesar consultas, superando a sistemas de la competencia en términos de capacidad de respuesta y eficiencia en el procesamiento de datos.
Para los interesados en el código del proyecto, deben saber que está escrito en C# con un núcleo de almacenamiento en C++, está liberado bajo la licencia MIT y es compatible con Linux y Windows.