Структурированное хранилище COM
![]() | Эта статья включает список общих ссылок , но в ней отсутствуют достаточные соответствующие встроенные цитаты . ( сентябрь 2009 г. ) |
Структурированное хранилище COM (также известное как COM структурированное хранилище или OLE структурированное хранилище ) — это технология, разработанная Microsoft как часть Windows операционной системы для хранения иерархических данных в одном файле. Строго говоря, термин «структурированное хранилище» относится к набору COM- интерфейсов , которые должна предоставлять соответствующая реализация, а не к конкретной реализации или конкретному формату файла (фактически, реализация структурированного хранилища не обязана хранить свои данные в файле). совсем). Помимо обеспечения иерархической структуры данных, структурированное хранилище может также обеспечивать ограниченную форму транзакционной поддержки доступа к данным. Microsoft предоставляет реализацию, которая поддерживает транзакции, а также реализацию, которая не поддерживает (так называемое хранилище простого режима ; последняя реализация также ограничена в других отношениях, хотя и работает лучше).
Структурированное хранилище широко используется в приложениях Microsoft Office , хотя в более новых выпусках (начиная с Office 2007 ) по умолчанию используется XML на основе Office Open XML . Это также важная часть как COM, так и связанных с ним технологий связывания и внедрения объектов (OLE). Другие известные приложения структурированного хранилища включают SQL Server , оболочку Windows и многие сторонние CAD- программы.
Мотивация
[ редактировать ]Структурированное хранилище решает некоторые проблемы, связанные с хранением нескольких объектов данных в одном файле. Одна из трудностей возникает, когда объект, сохраненный в файле, изменяется в размере из-за обновления. Если приложение, читающее/записывающее файл, ожидает, что объекты в файле останутся в определенном порядке, все, что следует за представлением этого объекта в файле, возможно, придется сдвинуть назад, чтобы освободить место, если объект растет, или вперед, чтобы заполнить его. пространство, оставшееся, если объект сжимается. Если файл большой, это может привести к дорогостоящей операции. Конечно, существует множество возможных решений этой трудности, но часто программист приложения не хочет иметь дело с деталями низкого уровня, такими как форматы двоичных файлов.
Структурированное хранилище предоставляет абстракцию, известную как поток , представленную интерфейсом. IStream
. Поток концептуально очень похож на файл, и IStream
Интерфейс предоставляет методы чтения и записи, аналогичные вводу/выводу файлов. Поток может находиться в памяти , внутри файла, внутри другого потока и т. д., в зависимости от реализации. Другая важная абстракция — это хранилище , представленное интерфейсом. IStorage
. Концептуально хранилище очень похоже на каталог в файловой системе . Хранилища могут содержать потоки, а также другие хранилища.
Если приложение желает сохранить в файле несколько объектов данных, одним из способов сделать это будет открытие IStorage
который представляет содержимое этого файла и сохраняет каждый из объектов в одном IStream
. Один из способов добиться последнего — через стандартный COM-интерфейс. IPersistStream
. OLE во многом зависит от этой модели при внедрении объектов в документы.
Формат
[ редактировать ]Реализация Microsoft использует формат файлов, известный как составные файлы , и все широко распространенные реализации структурированных хранилищ читают и записывают этот формат. Составные файлы используют структуру, подобную FAT , для представления хранилищ и потоков. Части файла, известные как сектора (они могут соответствовать или не соответствовать секторам базовой файловой системы), выделяются по мере необходимости для добавления новых потоков и увеличения размера существующих потоков. Если потоки удаляются или сжимаются, оставляя нераспределенные сектора, эти сектора можно повторно использовать для новых потоков.
Следующие приложения используют структурированное хранилище OLE (формат составного документа).
- Документы Microsoft Office 97 – 2003 :
- Word (.DOC, .DOT) Документы
- Таблицы Excel (.XLS, .XLT)
- Презентации PowerPoint (.PPT, .POT)
- Файлы издателя (.PUB)
- Файлы Visio (.VSD)
- Файлы проекта (.MPP)
- Файлы Microsoft PhotoDraw (.MIX)
- Файлы Microsoft Outlook (.MSG)
- Файлы установщика Windows (.MSI, .MSP, .MST)
- Microsoft, представь это! / Файлы цифровых изображений Microsoft (.MIX)
- RSS-каналы Internet Explorer Файлы платформы RSS Windows (.feed-ms)
- Заметки Windows 7 (.SNT)
- Файлы списков переходов Windows 7
- Thumbs.db
- Microsoft SQL 2000 Server DTS Пакеты
- Автодеск Ревит
- Автодеск Инвентор
- ФлэшПикс
- Продвинутый дизайнер
Собственное структурированное хранилище
[ редактировать ]На бета-тестирования этапе Windows 2000 в нее была включена функция Native Structured Storage ( NSS ) для хранения документов структурированного хранилища (например, двоичных форматов Microsoft Office и thumbs.db
файл, который Windows Explorer использует для кэширования миниатюр), причем каждый поток , составляющий документ, хранится в отдельном NTFS потоке данных . В него входили утилиты, которые автоматически разбивали потоки в обычном документе структурированного хранилища на потоки данных NTFS и наоборот. Однако после бета-версии 3 эта функция была отменена из-за несовместимости с другими компонентами ОС, и все файлы NSS автоматически конвертировались в формат единого потока данных. [1]
Реализации
[ редактировать ]- Для Microsoft .NET:
- OpenMCDF — бесплатный компонент .NET для доступа к файлам структурированного хранилища OLE, лицензия MPL.
- Для Linux:
- Библиотека структурированных файлов GNOME — может читать файлы структурированного хранилища Microsoft.
- НЕТ .
- Кроссплатформенный C++ для Window/MacOSX/Linux:
- Для Явы:
- POIFS — Java-реализация формата составного документа OLE 2, часть Apache POI .
- Для Перла:
- Для JavaScript:
- js-cfb — JavaScript-реализация формата составного документа OLE 2.
- Для Питона:
- составные файлы — реализация Python формата Microsoft Compound File Binary (CFB).
Ссылки
[ редактировать ]- ^ «Что такое собственное структурированное хранилище?» . Архивировано из оригинала 27 сентября 2007 г. Проверено 3 декабря 2007 г.