Skip to content

a. Descripción del Problema.

OscarAraya18 edited this page Jun 13, 2019 · 1 revision

MyInvencibleLibrary consiste en un sistema cliente/servidor que permite el almacenamiento de galerías de imágenes con posibilidad de reponerse a fallos. El sistema cuenta con los siguientes elementos:


RAID Library:

Se debe implementar una biblioteca que funcione como controlador de RAID 5. Esta biblioteca debe implementar al menos las funciones:

1. Read (capacidad de lectura).
2. Write (capacidad de escritura).
3. Seek (capacidad de búsqueda).

Dichas funciones deben comportarse de manera similar a las funciones tradicionales para leer/escribir/desplazarse en archivos. El controlador se encarga de gestionar los discos virtuales. Cada disco virtual es una única carpeta en el sistema de archivos donde se encuentran los bloques de cada archivo.

Por ejemplo, suponga que se guarda una imagen de n bytes. El controlador recibe la llamada a write, divide el archivo en bloques y para cada bloque crea un archivo de los discos virtuales. Adicionalmente calcula el bloque de paridad.

El controlador debe mantener cualquier información adicional para poder encontrar cada uno de los bloques del archivo y para poder recuperar datos en caso de perder alguno de los discos virtuales.


Metadata DB:

Es una base de datos NoSQL. La información debe almacenarse en archivos JSON o XML. Cada grupo debe definir la estructura de los archivos y la base de datos como tal. Para las imágenes es necesario, como mínimo, gestionar la siguiente información:

1. Nombre de la imagen.
2. Autor.
3. Año de creación.
4. Tamaño.
5. Descripción.


ServerLibrary:

Permite la comunicación entre los múltiples clientes y MyInvencibleLibrary. Queda a criterio de cada grupo la implementación de este servidor. Pueden considerar hacerlo mediante sockets, REST API o algún otro que se considere oportuno.


MyIDE:

Consiste en una aplicación que se instala en el cliente y sirve para poder acceder al servicio de MyInvencible. Debe ser implementado en C++ para Linux y además debe permitir las siguientes operaciones:

1. Agregar metadata.
2. Consultar metadata.
3. Eliminar metadata (al eliminar la metadata debe eliminarse también la imagen asociada a esta
metadata).
4. Modificar metadata.

Estas cuatro operaciones deben realizar siguiendo la sintaxis de SQL (INSERT, SELECT, DELETE y UPDATE). Las consultas en el IDE, además de devolver la metadata seleccionada debe agregar una opción para abrir la imagen asociada a la metadata que se despliegue después de ejecutar la consulta. Adicionalmente el IDE debe proveer la posibilidad de agregar galerías o imágenes. Esta funcionalidad no debe ser implementada mediante scripts.


Pruebas del sistema:

Se espera que el sistema permita realizar todas las operaciones desde MyIDE y que en caso de realizar consultas se puedan abrir las imágenes asociadas a los resultados mostrados, aún cuando se pierda alguno de los discos virtuales que almacenan la imagen.