100 likes | 228 Views
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
E N D
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 • Bloqueos detallados • Copias de seguridad y replicación en caliente. • Transacciones ACID. • Compatible con dbm, ndbm y hsearch. • Snapshots
Puesta en marcha # apt-get install libdb4.2-dev # gcc bdb.c –o bdb –ldb
Creación de Base #include <db.h> DB *dbp; u_int32_t flags; int ret; if (!ret = db_create(&dbp, NULL, 0) { flags = DB_CREATE; if (!ret = dbp->open(dbp, NULL, "my_db.db", NULL, DB_BTREE, flags, 0)) { if (dbp != NULL) dbp->close(dbp, 0); } }
Construcción de la base 1) Dos punteros de tipo DBT. a)Dato b)Clave 2) Asigno el valor al par 3) Invoco el método putpara almacenar en la base
Grabado de datos long dni = 31190867; char *nombre = “Pablo Sandoval"; 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; ret = dbp->put(dbp, NULL, &key, &data, DB_NOOVERWRITE); if (ret == DB_KEYEXIST) { dbp->err(dbp, ret, “La clave %d ya existe!\n", dni); }
Lectura de datos long dni = 31190867; char nombre[50]; 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, NULL, &key, &data, 0); printf("Clave: %d - Valor: %s\n", dni, nombre);
Borrado de datos long dni = 31190867; DBT key; memset(&key, 0, sizeof(DBT)); key.data = &dni; key.size = sizeof(long); dbp->del(dbp, NULL, &key, 0);
Corrupción dbp->sync(); db_dump y db_load
Manejo con estructuras 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.dni); key.size = sizeof(long); data.data = &p; data.size = sizeof(persona); ret = dbp->put(dbp, NULL, &key, &data, DB_NOOVERWRITE);