Cómo operar la base de datos LevelDB para agregar, eliminar y cambiar registros
Introducción a LevelDB
I Primeros pasos con LevelDB
LevelDB es el KV persistente de código abierto de Google. base de datos Tiene un alto rendimiento de escritura aleatoria y lectura/escritura secuencial, pero un rendimiento de lectura aleatoria promedio, lo que significa que LevelDB es muy adecuado para aplicaciones con alto rendimiento de escritura aleatoria y lectura/escritura secuencial. LevelDB adopta la estrategia LSM (Log Structured Merge). lsm_tree retrasa y agrupa los cambios de índice y migra eficientemente las actualizaciones al disco en forma de combinación para reducir la sobrecarga de inserción de índice.
Acerca de LSM, este artículo también se mencionará brevemente más adelante.
Según el sitio web oficial de LevelDB, las características y limitaciones de LevelDB son las siguientes:
Características:
1. longitud arbitraria;
2. Las entradas (es decir, registros K-V) se almacenan en el orden de claves del diccionario de forma predeterminada.
3. Operaciones básicas proporcionadas por la interfaz:
1: Put(), Delete(), Get(), Batch();
4. Admite operaciones atómicas en operaciones por lotes;
5. Puede crear una vista panorámica (instantánea) de instantáneas de datos y le permite buscar datos en la instantánea.
6. (o inverso) recorre los datos (el iterador creará implícitamente una instantánea);
7. Utiliza Snappy automáticamente para comprimir datos;
8. p>Restricciones:
1. El modelo de datos no relacional (NoSQL) no admite sentencias o índices SQL.
2 Solo se permite que un proceso acceda a datos específicos a la vez; Base de datos;
3. No existe una arquitectura C/S incorporada, pero los desarrolladores pueden usar la biblioteca LevelDB para encapsular un servidor ellos mismos.
LevelDB en sí es solo una biblioteca lib; en el directorio del código fuente Simplemente compila, y luego podemos incluir directamente el archivo de encabezado niveldb/include/db.h en nuestra aplicación. Este archivo de encabezado tiene varias interfaces básicas de operación de base de datos. Aquí hay un ejemplo de prueba:
#include
#include
#include "leveldb/db.h" p>
usando el espacio de nombres std;
int main(void)
{
niveldb::DB *db
niveldb: :Opciones opciones;
opciones.create_if_missing = true;
// abrir
niveldb::Estado estado = niveldb::DB::Open( opciones, "/tmp/testdb", &db);
afirmar(status.ok());
clave de cadena = "nombre"; valor = "chenqi";
// escribir
// estado = db->missing = verdadero
// abrir
niveldb: :Estado = niveldb::DB::Open( > estado = db->Put(leveldb::WriteOptions(), clave, valor);
afirmar(estado.ok());
// leer
estado = db->Get(leveldb:.ReadOptions(), clave, &valor
afirmar(status.ok()) ;
cout< // eliminar estado = db->. Eliminar(leveldb::WriteOptions(), clave) afirmar(status.ok()); cout< // eliminar estado; = db ->.ok()); estado = db->Get(leveldb:: ReadOptions(), clave, &valor); if(!status.ok()) { cerr< } else { cout< } // cerrar eliminar db; return 0; } El ejemplo anterior demuestra cómo insertar, obtener y eliminar registros. El código compilado es el siguiente: g++ -o test test.cpp libleveldb.a -lpthread -Iinclude Ejecutar. -------------- ---- --------------------------------------------- LevelDB Es la biblioteca del motor de almacenamiento de valores clave de código abierto de Google, similar a la biblioteca de índice de código abierto Lucene. Otros desarrolladores de software pueden utilizar esta biblioteca para el desarrollo secundario y satisfacer las necesidades de personalización. LevelDB utiliza el método de escritura de registros para mejorar el rendimiento de escritura, pero sacrifica parte del rendimiento de lectura. Para compensar esto, algunos han sugerido 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 una instancia de base de datos (2) realizar inserciones, modificaciones y consultas en la instancia de base de datos (3; ) Finalmente, cierre la base de datos después de su uso. Estos tres pasos se analizan en detalle a continuación: Abrir una instancia de base de datos Una base de datos leafldb tiene un nombre que corresponde a un 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 #include "leveldb/db.h" Leveldb/db.h leveldb ::DB* db; leveldb::Opciones opciones; opciones.create_if_missing = true leveldb::Estado estado = leveldb::DB: :Open(options,"/tmp/testdb", &db); assert(status.ok()); Si abre una base de datos existente, debe generar un error. . Inserte el siguiente código antes del método levelldb::DB::Open: options.error_if_exists = true; Realizar operaciones simples de lectura y escritura en la base de datos LevelDB proporciona tres métodos: Colocar, Eliminar y Obtener para modificaciones y consultas. 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 leveldb::Status s = db->Get(leveldb::ReadOptions(), key1, & value if(s.ok()) s = db->Put( niveldb::WriteOptions(), clave2, valor if(s.ok()) s = db->Delete(); leveldb::WriteOptions(),key1); 3. Cerrar la base de datos Después de realizar una serie de operaciones, debe cerrar la base de datos. La operación es relativamente simple: ... Abrir la base de datos como arriba... ... Operar la base de datos... eliminar db; Lo anterior es una introducción básica al uso simple de levelDB. El siguiente paso es cómo escribir su propio ejemplo de trabajo completo. 1. Descargue el código fuente git clone /p/leveldb/ 2. Compile el código fuente cdleveldb && haga todo 3. cpp #include # include #include #include int main(){ niveldb::DB* db niveldb::Opciones opciones.create_if_missing = true; niveldb::Estado estado = niveldb::DB::Open(opciones, "/tmp/ testdb", afirmar); (estado .ReadOptions(), clave, &valor); afirmar(status.ok() std::cout< std::string key2 = " key2"; //mueve el valor bajo la clave a key2 status = db->Put(leveldb::WriteOptions () ,clave2,valor); afirmar(status.ok()); estado = db->Delete(leveldb::WriteOptions(), clave afirmar(status.ok()); estado = db->Get(leveldb::ReadOptions(),key2, &value); > afirmar (status.ok()); std::cout< estado = db- >Get(leveldb::ReadOptions() ,clave, &valor if(! status.ok()) std::cerr< else std::cout< eliminar db devolver } 4. Compile y vincule g++ -o test test.cpp ./leveldb/libleveldb.a -lpthread -I./leveldb/include Preste atención a las rutas de ilegalveldb.a y leveldb include. 5. Resultados de ejecución ./test: valor clave2===valor clave no encontrada: