Yasmine es una base de datos en memoria de alto rendimiento y altamente escalable, inspirada en Redis y escrita en Go. Diseñada para satisfacer las necesidades de aplicaciones modernas, Yasmine ofrece una amplia gama de estructuras de datos, capacidades avanzadas de replicación y persistencia, un sistema de publicación/suscripción robusto y soporte para scripting mediante Lua.
- Alto Rendimiento: Operaciones rápidas y eficientes en memoria.
- Estructuras de Datos Complejas: Soporte para listas, conjuntos, conjuntos ordenados, y más.
- Persistencia Flexible: Guarda y carga el estado mediante RDB y AOF.
- Replicación para Alta Disponibilidad: Replicación entre nodos maestro y esclavo.
- Pub/Sub: Sistema de mensajería en tiempo real.
- Scripting Lua: Extiende la funcionalidad con scripts personalizados.
- Seguridad Incorporada: Autenticación, autorización y soporte HTTPS.
Yasmine requiere Go 1.16 o superior. Para comenzar, sigue estos pasos:
-
Clonar el repositorio:
git clone https://github.com/devmangel/Yasmine.git cd Yasmine
-
Instalar dependencias:
go mod tidy
-
Compilar el proyecto:
go build -o yasmine ./cmd/Yasmine/
-
Ejecutar Yasmine:
./yasmine
Para ejecutar un servidor Yasmine localmente:
go run cmd/Yasmine/main.go
package main
import (
"fmt"
"github.com/devmangel/Yasmine/internal/core/commands"
"github.com/devmangel/Yasmine/internal/core/data_structures"
)
func main() {
// Inicializa la tabla hash
ht := data_structures.NewHashTable()
// Crea y ejecuta un comando SET
setCmd := commands.NewSetStringCommand(ht)
setCmd.Execute("clave", "valor")
// Crea y ejecuta un comando GET
getCmd := commands.NewGetStringCommand(ht)
value, _ := getCmd.Execute("clave")
fmt.Printf("Valor obtenido: %s\n", value)
}
Yasmine soporta persistencia a través de RDB (snapshotting) y AOF (Append Only File):
// Configura la persistencia RDB
rdbPersistence := persistence.NewRDBPersistence("data/yasmine.rdb")
// Guarda el estado actual
rdbPersistence.Save(hashTable)
// Carga el estado desde un archivo RDB
loadedHT, _ := rdbPersistence.Load()
Yasmine facilita la replicación de datos entre nodos:
// Configura el nodo maestro
masterHT := data_structures.NewHashTable()
masterNode := replication.NewMasterNode(masterHT)
// Configura un nodo esclavo
slaveNode := replication.NewSlaveNode()
// Sincroniza datos entre el maestro y el esclavo
replicationManager := replication.NewReplicationManager(masterNode, []*replication.SlaveNode{slaveNode})
replicationManager.SyncToSlaves(masterHT)
La documentación completa del proyecto, incluyendo guías de instalación, uso avanzado, y contribución, está disponible en el directorio docs/. También puedes consultar la API de Yasmine para obtener detalles sobre las funciones públicas.
Las contribuciones son muy bienvenidas. Por favor, revisa nuestra Guía para Contribuyentes antes de enviar un pull request.
- Código de Alta Calidad: Sigue las mejores prácticas de Go, escribe pruebas para tu código, y documenta tus cambios.
- Discusión Previa: Abre un issue antes de empezar a trabajar en cambios importantes para alinearnos en los objetivos.
- Pruebas Automatizadas: Asegúrate de que todas las pruebas pasen antes de enviar tu contribución.
Yasmine se distribuye bajo la licencia MIT. Consulta el archivo LICENSE para más detalles.