1 / 10

Universidad Tecnológica Nacional Facultad Regional Buenos Aires

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

aggie
Download Presentation

Universidad Tecnológica Nacional Facultad Regional Buenos Aires

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Universidad Tecnológica Nacional Facultad Regional Buenos Aires Ingeniería en Sistemas de Información Sistemas Operativos Introducción a BerkeleyDB

  2. 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

  3. Puesta en marcha # apt-get install libdb4.2-dev # gcc bdb.c –o bdb –ldb

  4. 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); } }

  5. 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

  6. 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); }

  7. 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);

  8. 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);

  9. Corrupción dbp->sync(); db_dump y db_load

  10. 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);

More Related