La base de datos reemplaza automáticamente el código fuente
1. Introducción a LevelDB
LevelDB es la base de datos independiente KV persistente de código abierto de Google, que tiene
escritura aleatoria y lectura secuencial muy altas. /escribir rendimiento, pero el rendimiento de la lectura aleatoria es muy promedio, lo que significa que LevelDB es muy adecuado para escenarios donde hay pocas consultas pero muchas escrituras. LevelDB aplica LSM.
(Fusión estructurada de registros)
Estrategia, lsm_tree retrasa los lotes y procesa los cambios de índice, migra eficientemente las actualizaciones al disco en forma de combinación y reduce la sobrecarga de inserción de índice. Con respecto a LSM, este artículo es un artículo posterior.
La cara también se mencionará brevemente.
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 bytes 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 por lotes con operaciones atómicas.
5. Puede crear una instantánea del panorama de datos y permitirle encontrar datos en 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 un servidor.
LevelDB en sí es solo una biblioteca lib, que se puede compilar en el directorio fuente make y luego incluirse en el archivo de encabezado leveldb/include/db.h, y se puede incluir directamente en nuestra aplicación.
El archivo de encabezado tiene varias interfaces de operación de base de datos básicas. El siguiente es un ejemplo de prueba:
# include & ltiostream & gt
# include & ltstring& gt
#. include & ltassert.h & gt
#Include "leveldb/db.h"
Usar espacio de nombres std
int main(void)
{ ?
leveldb::DB? * db
leveldb::¿Opciones? Opciones;
opciones . crear _ si _ falta = verdadero;
//Abrir
nivel DB::Estado Estado = nivel DB::DB:: Open(options, "/tmp/testdb ", & ampdb);
assert(status . ok());
string key = " nombre
valor de cadena = "Chen Qi";
//Escribir
status = d B- & gt; put(leveldb::WriteOptions(), clave, valor);
assert(status . ok());
//Leer
status = d B- & gt; Get(leveldb::ReadOptions(), clave & amp; ; valor);
assert(status . ok());
cout & lt& ltvalue& lt& ltendl
//Eliminar
status = d B->Delete(leveldb::WriteOptions(), key);
assert(status . ok());
status = d B - > (leveldb::ReadOptions(), clave y valor);
if (!status.ok()) {
cerr & lt& ltkey & lt& lt" " " & lt& ltstatus . ToString()& lt;& ltendl
}else{
cout & lt& ltkey & lt& lt" = = = " & lt& ltvalue& lt& ltendl
} ?
//Cerrar
Eliminar db;
Devuelve 0;
}
Arriba El ejemplo lo demuestra. cómo insertar, obtener y eliminar registros y cómo compilar el código:
g++-o test test .CPP a-LP thread-Iinclude
Después de la ejecución. /test, se generará un directorio testdb en /tmp, que contiene varios archivos:
-
LevelDB
Google es un almacén de valores clave de código abierto Biblioteca de motor, 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.
Por favor. LevelDB utiliza escrituras de registros para mejorar el rendimiento de escritura a expensas del rendimiento de lectura. Para compensar el rendimiento de lectura sacrificado, algunas personas han 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 analizan en detalle a continuación:
Primero, abra una instancia de base de datos
El nombre de la base de datosleveldb 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 & ltassert.h & gt
#Include "leveldb/db.h"
nivel DB::DB * DB;
niveldb::Opciones opciones;
opciones crear _ si _ falta = verdadero
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 en la base de datos p >
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-> Get(leveldb::ReadOptions(), key1, & amp value ); p>
if(s . ok())s = d B->Put(leveldb::WriteOptions(),key2,value);
if(s . ok( ))s = d B->Delete(leveldb::WriteOptions(),key 1);
Tercero, cierra la base de datos
Después de realizar una serie de operaciones en la base de datos, la base de datos necesita estar cerrado. Esta operación es relativamente simple:
...Abra la base de datos como se describe arriba...
...Haga algo con la base de datos...
Eliminar la base de datos;
Lo anterior básicamente presenta el uso simple de levelDB, y el siguiente paso es cómo escribir un ejemplo completo y operable.
1. ¿Descargar el código fuente? git clone /p/leveldb/
2. ¿Compilar el código fuente? nivel de CD y amplificador y amplificador todos producidos
3. Escribe test.cpp
# include & ltassert.h & gt
# include & ltstring.h & gt
# incluir & ltlevel db/db .
# incluir & ltiostream & gt
int main(){
nivel DB::DB * DB;
niveldb::Opciones;
opciones crear _ si _ falta = verdadero
nivel DB:: Estado; Estado = nivel DB::DB::Open(opciones, "/tmp/testdb ", & ampdb);
assert(status . ok());
// Escribir clave1, valor1
STD::cadena clave = " clave ";
STD::cadena valor = " valor ";
estado = d B- & gt;Put(leveldb::WriteOptions(), clave, valor);
assert(status . ok());
status = d B- & gt;Get(leveldb ::ReadOptions(),key<value);
assert(status.ok());
STD::cout<<value<<STD ::endl;
STD::string key 2 = " key 2 ";
//Mover el valor debajo de la clave a key2
status = d B- & gt; (), clave2, valor);
assert(status . ok());
status = d B- & gt; ;
assert(status . ok());
status = d B- & gt; Get(leveldb::ReadOptions( ), clave 2 & amp; valor); /p>
assert(status . ok());
STD::cout & lt;& ltkey2 & lt& lt" = = = " <<value<<STD::endl;
status = d B->Get(leveldb::ReadOptions(), clave y valor);
if (! status .ok())STD::cerr & lt;& ltkey & lt& lt" " " & lt& ltstatus.
ToString()& lt;& ltSTD::endl;
else STD::cout & lt;& ltkey & lt& lt" = = = " & lt& ltvalue& lt& ltSTD::endl; p>
Eliminar db;
Devuelve 0;
}
4. Compile y vincule G++-otesttest.cpp../level db/libre veldb. a-LP hilo-I../leveldb/include.
Tenga en cuenta que las rutas a libleveldb.a yleveldb incluyen.
5. Resultados de ejecución. /prueba:
valor
clave2 = = =valor
Clave no encontrada: