Universidad Tecnológica Nacional Facultad Regional Buenos Aires

Post on 15-Jan-2016

34 views 0 download

description

Universidad Tecnológica Nacional Facultad Regional Buenos Aires Ingeniería en Sistemas de Información. Sistemas Operativos. Introducción a BerkeleyDB. Introducción. Los datos en formato nativo del lenguaje de programación. No tiene modo cliente-servidor . Caché configurable - PowerPoint PPT Presentation

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