Universidad Tecnológica Nacional Facultad Regional Buenos Aires
description
Transcript of Universidad Tecnológica Nacional Facultad Regional Buenos Aires
Universidad Tecnológica Nacional
Facultad Regional Buenos AiresIngeniería en Sistemas de
Información
Introducción a BerkeleyDBSistemas Operativos
• Los datos en formato nativonativo del lenguaje de programación.
• No tiene modo cliente-servidorcliente-servidor. • Caché configurable• Bloqueos detallados• Copias de seguridad y replicación en caliente. • Transacciones ACIDACID. • 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.h>
DB *dbp; u_int32_t flags; int ret;
if (!ret = db_createdb_create(&dbp, NULL, 0) {
flags = DB_CREATEDB_CREATE;
if (!ret = dbp->opendbp->open(dbp, NULL, "my_db.db", NULL, DB_BTREE, flags, 0)) {
if (dbpdbp != NULL) dbp->close(dbpdbp, 0);
}
}
Creación de Base
1) Dos punteros de tipo DBT.a)Datob)Clave
2) Asigno el valor al par
3) Invoco el método putput para almacenar en la base
Construcción de la base
long dni = 31190867;char *nombre = “Pablo Sandoval";
DBT key, dataDBT 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;
ret = dbp->putdbp->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 = 31190867;char nombre[50];
DBT key, dataDBT 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->getdbp->get(dbp, NULL, &key, &data, 0);
printf("Clave: %d - Valor: %s\n", dni, nombre);
Lectura de datos
long dni = 31190867;
DBT keyDBT key; memset(&key, 0, sizeof(DBT));
key.data = &dni;key.size = sizeof(long);
dbp->deldbp->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 = 31190867;
key.data = &(p.dnip.dni);key.size = sizeof(long);data.data = &p;data.size = sizeof(persona);
ret = dbp->putdbp->put(dbp, NULL, &key, &data, DB_NOOVERWRITE);
Manejo con estructuras