Universidad Tecnológica Nacional Facultad Regional Buenos Aires
description
Transcript of Universidad Tecnológica Nacional Facultad Regional Buenos Aires
![Page 1: Universidad Tecnológica Nacional Facultad Regional Buenos Aires](https://reader036.fdocumento.com/reader036/viewer/2022082612/568148d3550346895db5ee1f/html5/thumbnails/1.jpg)
Universidad Tecnológica Nacional
Facultad Regional Buenos AiresIngeniería en Sistemas de
Información
Introducción a BerkeleyDBSistemas Operativos
![Page 2: Universidad Tecnológica Nacional Facultad Regional Buenos Aires](https://reader036.fdocumento.com/reader036/viewer/2022082612/568148d3550346895db5ee1f/html5/thumbnails/2.jpg)
• 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
![Page 3: Universidad Tecnológica Nacional Facultad Regional Buenos Aires](https://reader036.fdocumento.com/reader036/viewer/2022082612/568148d3550346895db5ee1f/html5/thumbnails/3.jpg)
# apt-get install libdb4.2-dev
# gcc bdb.c –o bdb –ldb
Puesta en marcha
![Page 4: Universidad Tecnológica Nacional Facultad Regional Buenos Aires](https://reader036.fdocumento.com/reader036/viewer/2022082612/568148d3550346895db5ee1f/html5/thumbnails/4.jpg)
#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
![Page 5: Universidad Tecnológica Nacional Facultad Regional Buenos Aires](https://reader036.fdocumento.com/reader036/viewer/2022082612/568148d3550346895db5ee1f/html5/thumbnails/5.jpg)
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
![Page 6: Universidad Tecnológica Nacional Facultad Regional Buenos Aires](https://reader036.fdocumento.com/reader036/viewer/2022082612/568148d3550346895db5ee1f/html5/thumbnails/6.jpg)
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
![Page 7: Universidad Tecnológica Nacional Facultad Regional Buenos Aires](https://reader036.fdocumento.com/reader036/viewer/2022082612/568148d3550346895db5ee1f/html5/thumbnails/7.jpg)
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
![Page 8: Universidad Tecnológica Nacional Facultad Regional Buenos Aires](https://reader036.fdocumento.com/reader036/viewer/2022082612/568148d3550346895db5ee1f/html5/thumbnails/8.jpg)
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
![Page 9: Universidad Tecnológica Nacional Facultad Regional Buenos Aires](https://reader036.fdocumento.com/reader036/viewer/2022082612/568148d3550346895db5ee1f/html5/thumbnails/9.jpg)
dbp->sync();
db_dump y db_load
Corrupción
![Page 10: Universidad Tecnológica Nacional Facultad Regional Buenos Aires](https://reader036.fdocumento.com/reader036/viewer/2022082612/568148d3550346895db5ee1f/html5/thumbnails/10.jpg)
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