Universidad Tecnológica Nacional Facultad Regional Buenos Aires Ingeniería en Sistemas de Información Introducción a BerkeleyDB Sistemas Operativos
nativoLos datos en formato nativo del lenguaje de programación. cliente-servidorNo tiene modo cliente-servidor. Caché configurable Bloqueos detallados Copias de seguridad y replicación en caliente. ACIDTransacciones ACID. Compatible con dbm, ndbm y hsearch. Snapshots Introducción
# apt-get install libdb4.2-dev # gcc bdb.c –o bdb –ldb Puesta en marcha
#include DB *dbp; u_int32_t flags; int ret; db_create if (!ret = db_create(&dbp, NULL, 0) { DB_CREATE flags = DB_CREATE; dbp->open if (!ret = dbp->open(dbp, NULL, "my_db.db", NULL, DB_BTREE, flags, 0)) { dbp if (dbp != NULL) dbp dbp->close(dbp, 0); } Creación de Base
1) Dos punteros de tipo DBT. a)Dato b)Clave 2) Asigno el valor al par put 3) Invoco el método put para almacenar en la base Construcción de la base
long dni = ; char *nombre = Pablo Sandoval"; DBT key, data DBT key, data; memset(&key, 0, sizeof(DBT)); memset(&data, 0, sizeof(DBT)); key.data = &dni; key.size = sizeof(long); data.data = nombre; data.size = strlen(nombre) + 1; dbp->put ret = dbp->put(dbp, NULL, &key, &data, DB_NOOVERWRITE); if (ret == DB_KEYEXIST) { dbp->err(dbp, ret, La clave %d ya existe!\n", dni); } Grabado de datos
long dni = ; char nombre[50]; DBT key, data DBT key, data; memset(&key, 0, sizeof(DBT)); memset(&data, 0, sizeof(DBT)); key.data = &dni; key.size = sizeof(long); data.data = nombre; data.ulen = 50; data.flags = DB_DBT_USERMEM; dbp->get dbp->get(dbp, NULL, &key, &data, 0); printf("Clave: %d - Valor: %s\n", dni, nombre); Lectura de datos
long dni = ; DBT key DBT key; memset(&key, 0, sizeof(DBT)); key.data = &dni; key.size = sizeof(long); dbp->del dbp->del(dbp, NULL, &key, 0); Borrado de datos
dbp->sync(); db_dump y db_load Corrupción
typedef struct t_persona { long dni; char nombre[50]; char apellido[50]; } persona p;... strcpy(p.nombre, Pablo); strcpy(p.apellido, Sandoval); p.dni = ; p.dni key.data = &(p.dni); key.size = sizeof(long); data.data = &p; data.size = sizeof(persona); dbp->put ret = dbp->put(dbp, NULL, &key, &data, DB_NOOVERWRITE); Manejo con estructuras