Lanzamiento del motor de almacenamiento KV de alto rendimiento rosedb V2

¡Se lanza la primera versión de la refactorización RoseDB V2!

RoseDB es un motor de almacenamiento KV liviano, rápido y confiable basado en el modelo de almacenamiento Bitcask. El diseño del modelo de almacenamiento de Bitcask se inspira principalmente en los sistemas de archivos con estructura de registro y la fusión de archivos de registro.

Si está interesado, consulte el documento de Bitcask: riak.com/assets/bitc…

Los archivos en los que RoseDB almacena datos se han rediseñado utilizando registros de escritura anticipada, que son archivos de solo anexar con un caché de bloque.

wal: github.com/rosedblabs/…

Dividí la estructura de datos y el protocolo de Redis en el rosedb original, y formaré un proyecto separado más adelante para facilitar el acceso a diferentes motores de almacenamiento, como rosedb, badger, pebble, levledb, etc.

Por lo tanto, rosedb solo se enfoca en las funciones del motor de almacenamiento independiente y actualmente se encuentra en mantenimiento activo. Todos son bienvenidos a emitir o contribuir, haga clic en iniciar ⭐️. 

Dirección del proyecto: github.com/rosedblabs/…

Aquí hay algunas breves introducciones y ejemplos de uso de RoseDB:

caracteristica principal

Ventaja

  • Lectura y escritura de baja latencia

Esto se debe a la función de escritura adicional del archivo de modelo de almacenamiento de Bitcask, que aprovecha al máximo las ventajas de la E/S secuencial. Alto rendimiento, incluso cuando los datos están completamente desordenados

Los datos escritos en RoseDB no necesitan clasificarse en el disco, y el diseño de archivo con estructura de registro de Bitcask reduce el movimiento del cabezal del disco durante el proceso de escritura.

  • Capaz de manejar conjuntos de datos más grandes que la memoria, con un rendimiento estable

El acceso a datos en RoseDB implica búsquedas directas en estructuras de datos indexados en memoria, lo que hace que la búsqueda de datos sea muy eficiente incluso para conjuntos de datos muy grandes.

  • Un disco IO puede obtener cualquier par clave-valor

La estructura de datos del índice de memoria de RoseDB apunta directamente a la ubicación del disco donde se encuentran los datos. No requiere varias búsquedas de discos para leer un valor y, a veces, incluso no necesita buscar, gracias al caché del sistema de archivos del sistema operativo y al caché de bloques de WAL. .

  • Rendimiento rápido y estable

La operación de escritura de RoseDB debe abordar el final del archivo abierto actualmente como máximo una vez, y luego realizar una escritura adicional, y la memoria se actualizará después de la escritura. Este proceso no se verá afectado por el tamaño de los datos de la base de datos, por lo que el rendimiento es estable.

  • La recuperación de fallas es rápida

La recuperación de fallas con RoseDB es fácil y rápida porque los archivos de RoseDB se escriben solo una vez. Las operaciones de recuperación requieren la verificación de registros y la verificación de datos CRC para garantizar la coherencia de los datos.

  • copia de seguridad fácil

Las copias de seguridad pueden ser muy complejas en la mayoría de los sistemas. RoseDB simplifica este proceso con su formato en disco de agregar una vez. Cualquier herramienta que archive o copie archivos en orden de bloque de disco hará una copia de seguridad o copiará correctamente las bases de datos de RoseDB.

  • Las operaciones por lotes pueden garantizar atomicidad, consistencia y durabilidad.

RoseDB admite operaciones por lotes que son atómicas, consistentes y duraderas. Las nuevas operaciones de escritura en un lote se almacenan en la memoria hasta que se confirmen. Si el lote se confirma correctamente, todas las operaciones de escritura en el lote se conservan en el disco. Si el lote falla, se descartarán todas las operaciones de escritura en el lote. Es decir, todas las operaciones de escritura en una operación por lotes tienen éxito o fallan.

defecto

Todas las claves deben mantenerse en la memoria.

RoseDB mantiene todas las claves en la memoria en todo momento, lo que significa que su sistema debe tener suficiente memoria para almacenar todas las claves.

Comience rápidamente

operación básica

package main

import "github.com/rosedblabs/rosedb/v2"

func main() {
 // 指定选项
 options := rosedb.DefaultOptions
 options.DirPath = "/tmp/rosedb_basic"

 // 打开数据库
 db, err := rosedb.Open(options)
 if err != nil {
  panic(err)
 }
 defer func() {
  _ = db.Close()
 }()

 // 设置键值对
 err = db.Put([]byte("name"), []byte("rosedb"))
 if err != nil {
  panic(err)
 }

 // 获取键值对
 val, err := db.Get([]byte("name"))
 if err != nil {
  panic(err)
 }
 println(string(val))

 // 删除键值对
 err = db.Delete([]byte("name"))
 if err != nil {
  panic(err)
 }
}
`

operación por lotes

// 创建批处理
 batch := db.NewBatch(rosedb.DefaultBatchOptions)

 // 设置键值对
 _ = batch.Put([]byte("name"), []byte("rosedb"))

 // 获取键值对
 val, _ := batch.Get([]byte("name"))
 println(string(val))

 // 删除键值对
 _ = batch.Delete([]byte("name"))

 // 提交批处理
 _ = batch.Commit()
`

El código completo se puede ver en los ejemplos de código de muestra.

Supongo que te gusta

Origin juejin.im/post/7250410050486140983
Recomendado
Clasificación