]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
* chamullo conclusiones
authorRicardo Markiewicz <gazer.arg@gmail.com>
Mon, 31 May 2004 11:15:44 +0000 (11:15 +0000)
committerRicardo Markiewicz <gazer.arg@gmail.com>
Mon, 31 May 2004 11:15:44 +0000 (11:15 +0000)
* activo abreviaturas

doc/informe_2da_entrega.lyx
emufs/indice_b.c

index b172d59f990abc83476edb6ee9b2ace31b6c6711..cb247e3f672e6ed7fa2e03d730afca6bdfd3c9f8 100644 (file)
@@ -1206,4 +1206,54 @@ El buffer ordenado se implement
  de la biblioteca estándar de C poseen un buffer interno, por lo que los
  accesos a disco probablemente sea muy poco aún cuando se obtienen uno a
  uno.
+\layout Section
+
+Conclusiones
+\layout Standard
+
+Luego de terminar con todo los requerimientos del TP, inclusive aquellos
+ que solo nos hicieron retrasar con tareas mas importantes (como se la posibilid
+ad de imprimir a un archivo un reporte) nos pusimos a tratar de realizar
+ las comparaciones entre los distintos indices y los tipos de archivo.
+ En un primer momento se trato de hacerse midiendo tiempos, pero al no poseer
+ ANSI C funciones de tiempo con suficiente presicion no se pudo obtener
+ ninguna conclusión relevante.
+\layout Standard
+
+Fue entonces que desidimos hacer una comparativa basada en el uso del programa
+ modificando los parametros de carga.
+ Lo que hicimos fue para cada archivo (articulos y facturas) probar utilizar
+ la clave primaria con los tres tipos de arboles y luego navegar por los
+ menues del programa realizando operaciones de consultas, busquedas, etc
+ a fin de ver si se notaba diferencia.
+ Este útimo análisis no es del todo objetivo, pero nos dio pié para realizar
+ una charla por IRC donde discutimos nuestra experiencia con cada tipo de
+ índice.
+\layout Standard
+
+La conclusión a que llegamos es que para el archivo de artículos, que es
+ de tipo maestro (pues es un archivo que tiene pocas altas y muchas consultas)
+ sería preference utilizar un índice primario de tipo B+ ya que nos permite
+ acceder de manera ordenada de 2 maneras, mediante el índice y tener un
+ acceso secuencial (ideal para hacer un reporte por ejemplo), y dado que
+ los artículos permanecerán ordenados los reportes saldrán de la misma manera.
+\layout Standard
+
+En cambio para las facturas sería mejor tener un índice B o B*, ya que es
+ un archivo de transacciónes, donde se suponen que las altas son mayores
+ que las consultas (esperamos poder vender mucho!).
+ La ventaja del B y B* es que la inserción es más simple, requiere de un
+ menor movimiento de registros a la hora de agregar, ya que no es necesario
+ que en el archivo de datos estos queden ordenados, pudiendo quedar en cualquier
+ orden fisicamente, aún estando en el mismo bloque.
+ Esta forma de organizarla obviamente no es para nada útil si necesitaramos
+ por alguna razón acceder secuencialmente por clave primaria, ya que deberiamos
+ estar saltando por todo el archivo para poder hacerlo.
+\layout Standard
+
+No hemos encontrado muchas razones para decidirnos por B o B*, y que nuestra
+ implementacion es la misma salvando por el insertar, que en el caso del
+ B* hace todas las rotaciones posibles antes de hacer un split, cosa que
+ puede veneficiar ya que la creacion de nodos es menor, pero para las cantidades
+ de datos manejados no vemos que influya mucho.
 \the_end
index 228ed2b5bbc1b86a273fe05b4cc2148ea80c6874..db5e269df48ac9c931db8f46ca380ae5fcc48691 100644 (file)
@@ -277,8 +277,8 @@ char *b_leer_nodo(INDICE *idx, int id)
 {
        FILE *fp;
        char *out;
-       /*B_NodoHeader header;
-       B_NodoEntry *claves;*/
+       B_NodoHeader header;
+       B_NodoEntry *claves;
 
        if (id < 0) return NULL;
 
@@ -301,11 +301,11 @@ char *b_leer_nodo(INDICE *idx, int id)
        }
 
        /* Si estoy manejando string tengo que sacar las abreviaturas */
-/*     if (idx->tipo_dato == IDX_STRING) {
+       if (idx->tipo_dato == IDX_STRING) {
                b_leer_header(out, &header);
                claves = b_leer_claves(out, &header);
                desabreviar_claves(idx, claves, &header);
-       }*/
+       }
        fclose(fp);
        return out;
 }
@@ -313,15 +313,15 @@ char *b_leer_nodo(INDICE *idx, int id)
 static void b_grabar_nodo(INDICE *idx, int id, char *data)
 {
        FILE *fp;
-       /*B_NodoHeader header;
-       B_NodoEntry *claves;*/
+       B_NodoHeader header;
+       B_NodoEntry *claves;
 
        /* Si las claves son de tipo string debo abreviar antes de guardar */
-/*     if (idx->tipo_dato == IDX_STRING) {
+       if (idx->tipo_dato == IDX_STRING) {
                b_leer_header(data, &header);
                claves = b_leer_claves(data, &header);
                abreviar_claves(idx, claves, &header);
-       }*/
+       }
        fp = fopen(idx->filename, "r+");
        fseek(fp, id*idx->tam_bloque, SEEK_SET);
        fwrite(data, 1, idx->tam_bloque, fp);