El almacenamiento estructurado COM (también conocido como almacenamiento estructurado COM o almacenamiento estructurado OLE ) es una tecnología desarrollada por Microsoft como parte de su sistema operativo Windows para almacenar datos jerárquicos dentro de un único archivo. Estrictamente hablando, el término almacenamiento estructurado se refiere a un conjunto de interfaces COM que debe proporcionar una implementación conforme, y no a una implementación específica, ni a un formato de archivo específico (de hecho, una implementación de almacenamiento estructurado no necesita almacenar sus datos en un archivo en absoluto). Además de proporcionar una estructura jerárquica para los datos, el almacenamiento estructurado también puede proporcionar una forma limitada de soporte transaccional para el acceso a los datos. Microsoft proporciona una implementación que admite transacciones, así como una que no lo hace (llamada almacenamiento en modo simple , la última implementación también está limitada en otros aspectos, aunque funciona mejor).
El almacenamiento estructurado se utiliza ampliamente en las aplicaciones de Microsoft Office , aunque las versiones más nuevas (a partir de Office 2007 ) utilizan Office Open XML basado en XML de forma predeterminada. También es una parte importante tanto de COM como de las tecnologías relacionadas de vinculación e incrustación de objetos (OLE). Otras aplicaciones notables del almacenamiento estructurado incluyen SQL Server , el shell de Windows y muchos programas CAD de terceros .
El almacenamiento estructurado resuelve algunas de las dificultades inherentes al almacenamiento de múltiples objetos de datos en un único archivo. Una de las dificultades surge cuando un objeto que se mantiene en el archivo cambia de tamaño debido a una actualización. Si la aplicación que lee o escribe el archivo espera que los objetos del archivo permanezcan en un orden determinado, es posible que sea necesario desplazar hacia atrás todo lo que siga a la representación de ese objeto en el archivo para dejar espacio si el objeto crece, o hacia adelante para llenar el espacio que quede si el objeto se encoge. Si el archivo es grande, esto podría resultar en una operación costosa. Por supuesto, existen muchas soluciones posibles para esta dificultad, pero a menudo el programador de aplicaciones no quiere lidiar con detalles de bajo nivel, como los formatos de archivos binarios.
El almacenamiento estructurado proporciona una abstracción conocida como flujo , representada por la interfaz IStream
. Un flujo es conceptualmente muy similar a un archivo, y la IStream
interfaz proporciona métodos para leer y escribir similares a la entrada/salida de archivos. Un flujo podría residir en la memoria , dentro de un archivo, dentro de otro flujo, etc., dependiendo de la implementación. Otra abstracción importante es la de un almacenamiento , representada por la interfaz IStorage
. Un almacenamiento es conceptualmente muy similar a un directorio en un sistema de archivos . Los almacenamientos pueden contener flujos, así como otros almacenamientos.
Si una aplicación desea conservar varios objetos de datos en un archivo, una forma de hacerlo sería abrir un IStorage
que represente el contenido de ese archivo y guardar cada uno de los objetos dentro de un solo archivo IStream
. Una forma de lograr esto último es a través de la interfaz COM estándar IPersistStream
. OLE depende en gran medida de este modelo para incrustar objetos dentro de los documentos.
La implementación de Microsoft utiliza un formato de archivo conocido como archivos compuestos , y todas las implementaciones de almacenamiento estructurado ampliamente implementadas leen y escriben este formato. Los archivos compuestos utilizan una estructura similar a FAT para representar almacenamientos y flujos. Los fragmentos del archivo, conocidos como sectores (estos pueden o no corresponder a sectores del sistema de archivos subyacente), se asignan según sea necesario para agregar nuevos flujos y aumentar el tamaño de los flujos existentes. Si los flujos se eliminan o reducen, dejando sectores sin asignar, esos sectores se pueden reutilizar para nuevos flujos.
Las siguientes aplicaciones utilizan el almacenamiento estructurado OLE (formato de documento compuesto)
Durante la fase de prueba beta de Windows 2000 , se incluyó una característica denominada Almacenamiento estructurado nativo ( NSS ) para el almacenamiento de documentos de almacenamiento estructurado (como los formatos binarios de Microsoft Office y el thumbs.db
archivo que utiliza Windows Explorer para almacenar en caché las miniaturas) con cada secuencia que compone un documento almacenado en una secuencia de datos NTFS separada . Incluía utilidades que dividían automáticamente las secuencias de un documento de almacenamiento estructurado normal en secuencias de datos NTFS y viceversa. Sin embargo, la característica se retiró después de la Beta 3 debido a incompatibilidades con otros componentes del sistema operativo, y todos los archivos NSS se convertían automáticamente al formato de secuencia de datos única. [1]