Colección de citas famosas - Colección de poesías - Cómo agregar, eliminar y modificar diccionarios

Cómo agregar, eliminar y modificar diccionarios

Los siguientes ejemplos demuestran cómo insertar, obtener y eliminar registros.

Introducción a LevelDB

1. Introducción a LevelDB

LevelDB es la base de datos independiente KV persistente de código abierto de Google. Tiene un alto rendimiento de escritura aleatoria y lectura/escritura secuencial, pero el rendimiento de lectura aleatoria es muy promedio, lo que significa que LevelDB es muy adecuado para A. escenario donde hay pocas consultas pero muchas escrituras. LevelDB adopta la estrategia LSM (fusión estructurada de registros). lsm_tree retrasa y agrupa los cambios de índice y migra eficientemente las actualizaciones al disco de una manera similar a la ordenación por fusión, lo que reduce la sobrecarga de inserción de índice. Con respecto a LSM, también se mencionará brevemente más adelante en este artículo.

Según la descripción en el sitio web oficial de LevelDB, las características y limitaciones de LevelDB son las siguientes:

Características:

1. matrices de longitud arbitraria.

2. De forma predeterminada, las entradas (es decir, registros K-V) se almacenan en el orden de claves del diccionario. Por supuesto, los desarrolladores también pueden sobrecargar esta función de clasificación.

3. Interfaces de operación básicas proporcionadas: Put(), Delete(), Get(), lote();

4. Admite operaciones atómicas y por lotes;

5. Puede crear una instantánea del panorama de datos y permitirle encontrar datos dentro de la instantánea;

6. Puede recorrer los datos a través de un iterador directo (o inverso) (el iterador lo hará). implícitamente para crear instantáneas);

7. Usar Snappy automáticamente para comprimir datos;

8. Portabilidad;

Limitaciones:

1. , Modelo de datos no relacional (Nosql), no admite sentencias o índices sql;

2. Solo se permite que un proceso acceda a una base de datos específica a la vez; No existe una arquitectura C/S incorporada, pero los desarrolladores pueden usar la biblioteca LevelDB para empaquetar el servidor.

LevelDB en sí es solo una biblioteca lib, que se puede compilar en el directorio fuente make, y luego el archivo de encabezado leveldb/include/db.h se puede incluir directamente en nuestra aplicación.

El archivo de encabezado tiene varias interfaces básicas de operación de base de datos. El siguiente es un ejemplo de prueba:

# include ltiostream gt

# include lt string gt

# include ltassert. .h gt

#Contiene "leveldb/db.h"

Usa el espacio de nombres std

int main(void)

{

nivel DB::DB * DB;

leveldb::Options;

opciones create_if_missing = true;

//Abrir<. /p>

nivel DB::Estado Estado = nivel DB::DB::Open(opciones "/tmp/testdb", ampdb);

assert(status .ok());

clave de cadena="nombre";

valor de cadena="Chen Qi";

//Escribir

estado = db-gt ; put(nivel db::escribir opciones(), clave, valor);

assert(status.ok());

/ /read

status = db-gt;get(level db::read options(),key&value);

assert(status.ok());

cout lt lt valor lt ltendl

//Eliminar

status = db-gt;eliminar(nivel db::escribir opciones(),clave);

assert(status.ok() );

estado = db-gt; get(nivel db::read options(), clave amp; valor);

if(!status.ok())

cerr lt ltkey lt""" lt ltstatus.ToString() lt; ltendl

} else {

cout lt ltkey lt lt" = = =" lt ; lt valor lt ltendl

}

//Cerrar

Eliminar base de datos;

Devuelve 0;

}

El ejemplo anterior demuestra cómo insertar, obtener y eliminar registros y compilar el código:

g -o test test . >

Después de la ejecución. /test, se generará un directorio testdb en /tmp, que contiene varios archivos:

-

LevelDB es una biblioteca de motor de almacenamiento clave-valor de código abierto de Google, similar a open fuente de la biblioteca de índices de Lucene. Otros desarrolladores de software pueden utilizar esta biblioteca para el desarrollo secundario y satisfacer las necesidades de personalización. LevelDB utiliza escrituras de registros para mejorar el rendimiento de escritura a expensas del rendimiento de lectura. Para compensar el rendimiento de lectura sacrificado, se ha propuesto utilizar SSD como medio de almacenamiento.

Para los motores de almacenamiento de valores clave localizados, el uso simple generalmente se divide en tres pasos básicos: (1) Abrir la instancia de la base de datos (2) Insertar, modificar y consultar la instancia de la base de datos; Después del uso, cierre la base de datos. Estos tres pasos se analizarán en detalle a continuación:

Primero, abra una instancia de base de datos

El nombre de la base de datosleveldb corresponde al directorio del sistema de archivos. Todo el contenido de la base de datos se almacena en este directorio. El siguiente código describe cómo abrir una base de datos o crear una nueva base de datos.

# include ltassert.h gt

#Include "leveldb/db.h"

nivel DB::DB * DB;

niveldb::Opciones;

opciones.create_if_missing = true;

nivel DB::Estado Estado = nivel DB::DB::Open(opciones "/tmp/testdb", ampdb);

assert(status.ok());

Si abre una base de datos existente, debe generar un error. Inserte el siguiente código antes del métodoleveldb::DB::Open:

options.error _ if _ existe = true

Segundo, operaciones simples de lectura y escritura de bases de datos

LevelDB proporciona tres métodos: Put, Delete y Get para modificar y consultar la base de datos. Por ejemplo, el siguiente fragmento de código describe cómo mover el valor correspondiente a la clave1 al valor correspondiente a la clave2.

std::valor de cadena;

nivel db::Estado s = d B-gt; get (nivel db::leer opciones(), clave1, valor de amplificador <); /p>

if (s . ok () s = db- gt; put (nivel db::escribir opciones (), clave2, valor);

if (s . ok () s = db-gt;delete(level db::write options(),key 1);

Tercero, cierra la base de datos

Después de realizar una serie de operaciones en la base de datos, necesita cerrar la base de datos. Esta operación es relativamente simple:

...abre la base de datos como arriba...

...haz algo con la base de datos...

Eliminar la base de datos;

Lo anterior básicamente presenta el uso simple de levelDB. El siguiente paso es cómo escribir un ejemplo completo y operativo.

1. Descargue el clon fuente de git /p/leveldb/

2. Compile el código fuente a nivel de CD y todo lo producido

3. .cpp

# incluir ltassert.h gt

# incluir ltstring.h gt

# incluir ltlevel db/db .h gt;

# incluir ltiostream gt

int main(){

nivel DB::DB * DB;

leveldb::opción Opciones;

options.create_if_missing = true;

nivel DB::Status Estado = nivel DB::DB::Open(opciones "/tmp/testdb", ampdb);

afirmar(status.ok());

//Escribir clave1, valor1

STD::cadena clave="clave";

STD: :cadena valor = "valor";

status = db-gt; put(nivel db::escribir opciones(), clave, valor);

assert(status.ok()) ;

status = db-gt; get(level db::read options(), key amp; value);

assert(status.ok());

std::coutlt. lt value lt ltSTD::endl;

STD::string key 2="key 2";

//Mover el valor bajo key a key2

estado = db- gt; put(nivel db::opciones de escritura(), clave2, valor);

assert(status.ok());

estado = db- gt; ;eliminar(nivel db::opciones de escritura(),clave);

assert(status.ok());

status = db- gt;get(nivel db: : leer opciones(), clave 2&valor);

assert(status.ok());

std::coutlt. ltkey2 lt lt "= =" lt; lt valor lt ltstd::endl;

status = db-gt; nivel db::read options(), clave y valor);

status = db-gt; p>

if (!status.ok() std::cerr lt;ltkey ltlt""" ltstatus.ToString() lt;ltstd::endl;

else std:: coutlt.

ltkey lt lt "= = =" lt; lt value lt ltstd::endl;

Eliminar base de datos

Devuelve 0;

4. Compile y vincule G -otesttest.cpp../level db/libre vel db.

Tenga en cuenta que las rutas a libleveldb.a yleveldb incluyen.

5. Resultados de ejecución. /prueba:

valor

clave2 = = =valor

Clave no encontrada: