jueves, 21 de octubre de 2010

Caracteristicas del Nuevo Tipo de Datos: FILESTREAM


A lo largo del tiempo, los desarrolladores hemos inventando variadas técnicas, para almacenar datos no estructurados como ser mapas de bits (bitmaps), archivos de texto, archivos de audio, etc.  Algunas de ellas han sido, por ejemplo guardar en la base de datos la ruta donde el archivo se alojaba en el sistema de archivos.
Claro que esto trae problemas de seguridad, o de pérdidas de referencias por cambios en la ruta.
Una novedad de SQL Server 2008 en lo que a tipo de datos se refiere es la introducción del FILESTREAM esta nos trae solución a aquellos problemas, permitiéndole a las aplicaciones utilizar las API de streaming con el mismo rendimiento que el sistema de archivos, y a su vez mantener una consistencia transaccional el mismo esquema de seguridad entre la información estructurada y la no estructurada.
La seguridad para los objetos almacenados en un campo del tipo FILESTREAM goza de los mismos privilegios que cualquier tipo de dato ya existente. Solo es necesario establecer los permisos a la tabla o la columna que lo contenga.
Es decir, si el usuario tiene permisos de acceso a la columna correspondiente, podrá abrir el archivo asociado a ella.
El tipo de dato FILESTREAM es implementado como una columna varbinary(max), y totalmente integrado en el motor.  Lo cual permite utilizar todas las técnicas de copias de respaldo y restauración para resguardar los datos.
Los BLOBS (Binary Large Object) consisten en conjuntos de datos no estructurados como ficheros de texto, imágenes o vídeos
Características FILESTREAM :
 - Almacena grandes ficheros de datos binarios no estructurados directamente en un sistema de ficheros NTFS: documentos, imágenes, etc.
 - Se preserva el control por parte de la BD y la consistencia transaccional.
Un ejemplo de uso de FILESTREAM es  la posibilidad de controlar mediante la base de datos una carpeta de archivos de vídeo.
Detalle de las características de FILESTREAM :
 Especifica que la columna se ha de almacenar en el sistema de ficheros NTFS:
  - La columna sigue siendo manejable mediante comandos T-SQL.
  - Se puede acceder desde el sistema de ficheros y desde la API del SO.
 Es un atributo de una columna varbinary(max).
 Se implementa como una columna varbinary(max) en la que los datos son guardados como BLOBs en el sistema de ficheros:
 EL tamaño máximo de los BLOBs viene limitado únicamente por el tamaño del volumen de almacenamiento.
 La limitación estándar de los tipos varbinary(max) de 2 GB no se aplican a estos BLOBs que se almacenan en el sistema de ficheros.
¿Cuándo es recomendable utilizar el tipo de datos FILESTREAM?
- Se necesita almacenar objetos que ocupan como media más de 1 MB.
- Es importante el acceso rápido en modo lectura.

Algunas limitaciones FILESTREAM:
- Creación de reflejo de la base de datos , la creación de reflejo de la base de datos no es compatible con FILESTREAM. No es posible crear un grupo de archivos FILESTREAM en el servidor principal.
- La creación de reflejo de la base de datos no puede configurarse para una base de datos que contiene grupos de archivos FILESTREAM.
- SQL Server Express es compatible con FILESTREAM. El límite de tamaño de base de datos de 4 GB no incluye el contenedor de datos de FILESTREAM.
- Cuando una tabla contiene una columna FILESTREAM, cada fila ha de tener un ID de fila único.
- Las columnas FILESTREAM solo pueden almacenar datos en volúmenes de disco locales, almacenamiento remoto en futuras versiones.
- No soporta columnas FILESTREAM en parámetros de tabla
- No soporta Database Mirroring
Seguridad :
- Solo la cuenta de servicio tiene permisos sobre el sistema de ficheros del contenedor FILESTREAM.
- Cuando una base de datos se abre, SQL Server retringe el acceso al contenedor/es FILESTREAM, excepto cuando el acceso se realiza desde transacciones T-SQL y la API OpenSqlFilestream
- Cuando la BBDD se cierra, los datos físicos del contenedor sen completamente accesibles y sujetos a la seguridad de Windows. Es recomendable asegurar los directorios que contienen FILESTREAMs para que los archivos no sean accidetalmente modificados o borrados.

Pasos para Habilitar FILESTREAM
1. Abrir SQL Server Configuration Manager. Seleccionar la instancia y ubicarnos en la pestana FILESTREAM, habilitar Enabled FILESTREAM for Transact-SQL acces,   Enabled FILESTREAM for file I/O streaming Access. Opcionalmente podemos habilitar la opción de permitir que los clientes tengan acceso a los datos FILESTREAM
2. Tambien podemos habilitarlo via T-SQL: 
EXEC sp_configure filestream_access_level, 2
RECONFIGURE
3.       Verificar en la Administracion de Equipo,  Carpetas Compartidas,  Sesiones,  y veremos nuestra Carpeta compartida de SQL para FILESTREAM.
4.       Configurar la base de datos de tal manera que agreguemos un FileGroup del tipo FILESTREAM,  posteriormente un File en la base apuntando al Filegroup y con una ruta del sistema de archivos local.
5.       Creamos una Tabla para almacenar datos FILESTREAM. Hacer notar que deberá contener una columna UNIQUEIDENTIFIER no nula y de carácter único.
CREATE TABLE Documentos
(DocumentoID UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL UNIQUE,
 Nombre VARCHAR(100),
Contenido VARBINARY(MAX) FILESTREAM NULL)
6.       Realizamos la inserción a la Tabla
INSERT INTO Documentos
 ( DocumentoID,     Nombre, Contenido )
 VALUES ( NEWID(), 'Bernardo',  CAST('Archivo de Texto' AS VARBINARY(MAX))
7.       Por último comprobamos la ruta, y lo que se inserto:
SELECT CAST(Contenido AS varchar), Contenido.PathName(), * FROM Documentos d

No hay comentarios:

Publicar un comentario