2016-07-13 2 views
1

Я хочу использовать «классический» подход к записи текста текста в текстовый файл. Вместо того, чтобы сохранять это локально, я хочу записать данные в блокблока. Это код:Регистрация с использованием Azure BlockBlob (Запись в текстовые файлы с использованием нескольких сценариев сценариев)

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(StorageConnectionString); 
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 
CloudBlobContainer share = blobClient.GetContainerReference("logStorage"); 
var logFile=share.GetAppendBlobReference("mylog.log"); 
logFile.AppendText("This is a log entry"); 

Это работает, но только в сценарии одного писателя, как documenation четко сказано, для AppendText():

Этот API должен использоваться строго в одном сценарии писателя, потому что API внутренне использует условный заголовок с добавлением смещения, чтобы избежать дублирования блоков , которые не работают в сценарии с несколькими сценариями.

Так что, если мне нужно, что функциональность в нескольких писательских сценариев, что я должен использовать в качестве альтернативы?

+0

вы пробовали плагин log4net для лазурного хранения. довольно просто настроить https://github.com/stemarie/log4net.Azure. Вы всегда можете иметь простой класс-оболочку, который возвращает объект singleton log4net. – Aravind

+0

Я знаю это приложение. Они устраняют проблему, сохраняя каждый вход в отдельный файл. Не очень умное решение этой проблемы. Кроме того: это xml not plan text –

+0

oh yeah .. или вы можете попробовать иметь отдельную службу, которая следит за папкой журнала на вашем компьютере, и она может загружать файлы по мере их появления. тогда как основная задача/поток будет просто создавать журналы в папке. и загрузчик позаботится о загрузке. в загрузчике вы можете увидеть, можете ли вы использовать TPL для запуска столько задач, сколько загружаемых файлов. – Aravind

ответ

1

@OleAlbers, as @ TamraMyers-Microsoft, описание ниже из раздела «Избегание дублирования или отложенных добавлений» REST API Append Block, это способ для сценария с несколькими писателями.

В сценарии с несколькими сценариями каждый клиент может использовать условные заголовки, но это может быть не оптимальный подход с точки зрения производительности.

Но ссылка также указана ниже.

Для максимального одновременного дописывания пропускной способности, приложения должны обрабатывать избыточные присоединяют и замедленные добавляет в их прикладном уровне (например, добавление или эпох номера последовательности в данных, прилагается).

Я думаю, что простой & лучшего способ, чтобы удовлетворить ваши потребности использует безблокировочное решение, например, как новый Dataflow library, часть Async CTP, чтобы asyncly выполнять операции многоканального писателя.

Вы можете попробовать обратиться к учебнику How to: Write Messages to and Read Messages from a Dataflow Block, чтобы переписать код с одним писателем, подходящий для сценария многопользовательской записи.

0

Для сценария с несколькими сценарием вызовите Append Block вместо AppendText. См. Метод AppendBlock в клиентской библиотеке.

Append Block обеспечивает атомарность, но ограничивает полезную нагрузку размером одного блока.

Смежные вопросы