Show / Hide Table of Contents

Class FileSystemBlobStorage

Реализует сервис для работы хранилищем BLOB (Binary Large OBject) на основе файловой системы.

Inheritance
System.Object
FileSystemBlobStorage
Namespace:InfinniPlatform.BlobStorage
Assembly:InfinniPlatform.BlobStorage.FileSystem.dll
Syntax
public class FileSystemBlobStorage : object, IBlobStorage
Remarks

Достаточно простая реализация. Хранилище представляет собой каталог с файлами. Для обеспечения быстрого доступа к файлам - log(N) - каталог организован в виден набора вложенных друг в друга подкаталогов. Нулевой уровень - корневая папка хранилища, первый уровень - первые 2 символа идентификатора BLOB, второй уровень - вторые 2 символа идентификатора BLOB, третий уровень - оставшиеся символы идентификатора BLOB. В каталоге третьего уровня содержат два файла: info и data. В файле info хранится мета-информация о BLOB, представленная в виде JSON-объекта (идентификатор, наименование, MIME-тип, размер, дата изменения и т.п.). Наличие файла info в текущей реализации не обязательно. В файле data хранятся данные BLOB. Наличие файла data обязательно.

Выбор в пользу использования обычной файловой системы был сделан не случайно. Во-первых, это самый простой и гибкий способ. Во-вторых, некоторые распределенные файловые системы имеют FUSE (Filesystem in Userspace) адаптеры, поддерживающие POSIX-стандарт, что дает возможность использовать функции обычной файловой системы при работе, не задумываясь о том, что на самом деле работа идет с распределенным хранилищем. В-третьих, пока трудно судить о том, какое распределенное хранилище (из тех, которые не имеют FUSE) подойдет лучше других.

ЗАМЕЧАНИЕ. В настоящее время чтение и запись выполняются в режиме , что сделано для решения проблемы с блокировки доступа к файлам в многопоточном режиме, однако появляется вероятность грязного чтения и грязной записи. Если предложенный подход не решит проблему с блокировками доступа или создаст неудобство с доступом на запись, следует организовать очередь на запись с возможностью повтора записи при возникновении ошибок, а доступ к каждому файлу контролировать механизмом, подобным , но более простым.

Constructors

| Improve this Doc View Source

FileSystemBlobStorage(FileSystemBlobStorageOptions, IObjectSerializer, IMimeTypeResolver, IPerformanceLogger<FileSystemBlobStorage>)

Declaration
public FileSystemBlobStorage(FileSystemBlobStorageOptions options, IObjectSerializer objectSerializer, IMimeTypeResolver mimeTypeResolver, IPerformanceLogger<FileSystemBlobStorage> perfLogger)
Parameters
Type Name Description
FileSystemBlobStorageOptions options
IObjectSerializer objectSerializer
IMimeTypeResolver mimeTypeResolver
IPerformanceLogger<FileSystemBlobStorage> perfLogger

Methods

| Improve this Doc View Source

CreateBlob(String, String, Stream)

Declaration
public BlobInfo CreateBlob(string blobName, string blobType, Stream blobData)
Parameters
Type Name Description
System.String blobName
System.String blobType
Stream blobData
Returns
Type Description
BlobInfo
| Improve this Doc View Source

CreateBlobAsync(String, String, Stream)

Declaration
public Task<BlobInfo> CreateBlobAsync(string blobName, string blobType, Stream blobData)
Parameters
Type Name Description
System.String blobName
System.String blobType
Stream blobData
Returns
Type Description
Task<BlobInfo>
| Improve this Doc View Source

DeleteBlob(String)

Declaration
public void DeleteBlob(string blobId)
Parameters
Type Name Description
System.String blobId
| Improve this Doc View Source

GetBlobData(String)

Declaration
public BlobData GetBlobData(string blobId)
Parameters
Type Name Description
System.String blobId
Returns
Type Description
BlobData
| Improve this Doc View Source

GetBlobInfo(String)

Declaration
public BlobInfo GetBlobInfo(string blobId)
Parameters
Type Name Description
System.String blobId
Returns
Type Description
BlobInfo
| Improve this Doc View Source

UpdateBlob(String, String, String, Stream)

Declaration
public BlobInfo UpdateBlob(string blobId, string blobName, string blobType, Stream blobData)
Parameters
Type Name Description
System.String blobId
System.String blobName
System.String blobType
Stream blobData
Returns
Type Description
BlobInfo
| Improve this Doc View Source

UpdateBlobAsync(String, String, String, Stream)

Declaration
public Task<BlobInfo> UpdateBlobAsync(string blobId, string blobName, string blobType, Stream blobData)
Parameters
Type Name Description
System.String blobId
System.String blobName
System.String blobType
Stream blobData
Returns
Type Description
Task<BlobInfo>

Extension Methods

DynamicCollectionExtensions.GetItem(Object, Int32)
DynamicCollectionExtensions.SetItem(Object, Int32, Object)
DynamicCollectionExtensions.AddItem(Object, Object)
DynamicCollectionExtensions.InsertItem(Object, Int32, Object)
DynamicCollectionExtensions.RemoveItem(Object, Object)
DynamicCollectionExtensions.RemoveItemAt(Object, Int32)
DynamicCollectionExtensions.MoveItem(Object, Object, Int32)
DynamicObjectExtensions.TryGetPropertyValue(Object, String)
DynamicObjectExtensions.TrySetPropertyValue(Object, String, Object)
DynamicObjectExtensions.TryGetPropertyValueByPath(Object, String)
DynamicObjectExtensions.TrySetPropertyValueByPath(Object, String, Object)
ReflectionExtensions.IsInstanceOfType(Object, Type)
ReflectionExtensions.GetMemberValue(Object, String)
ReflectionExtensions.SetMemberValue(Object, String, Object)
ReflectionExtensions.InvokeMember(Object, String, Object[], out Object, Type[])
ReflectionExtensions.GetFieldValue(Object, FieldInfo)
ReflectionExtensions.SetFieldValue(Object, FieldInfo, Object)
ReflectionExtensions.GetPropertyValue(Object, PropertyInfo)
ReflectionExtensions.SetPropertyValue(Object, PropertyInfo, Object)
ReflectionExtensions.GetMethodDelegate(Object, MethodInfo)
ReflectionExtensions.GetEventDelegate(Object, EventInfo)
ReflectionExtensions.SetEventDelegate(Object, EventInfo, Object)
CommonExtensions.ExecuteSilent<T>(T, Action<T>)
  • Improve this Doc
  • View Source
Back to top © Copyright Infinnity Solutions Ltd, 2010–2017.