更新Azure blob存储中的许多json文件?

时间:2014-10-28 16:28:40

标签: azure azure-storage-blobs cloud-storage

我有大约1,000,000个json文件,我想每30分钟更新一次。更新只是将新数组附加到现有内容的末尾。

单个更新使用类似于以下的代码:

            CloudBlockBlob blockBlob = container.GetBlockBlobReference(blobName);

            JObject jObject = null;
            // If the blob exists, then we may need to update it.
            if(blockBlob.Exists())
            {
                MemoryStream memoryStream = new MemoryStream();
                blockBlob.DownloadToStream(memoryStream);

                jObject = JsonConvert.DeserializeObject(Encoding.UTF8.GetString(memoryStream.ToArray())) as JObject;
            } // End of the blob exists

            if(null == jObject)
            {
                jObject = new JObject();
                jObject.Add(new JProperty("identifier", identifier));
            } // End of the blob did not exist

            JArray jsonArray = new JArray();

            jObject.Add(new JProperty(string.Format("entries{0}", timestamp.ToString()),jsonArray));

            foreach(var entry in newEntries)
            {
                jsonArray.Add(new JObject(
                    new JProperty("someId", entry.id),
                    new JProperty("someValue", value)
                    )
                );
            } // End of loop

            string jsonString = JsonConvert.SerializeObject(jObject);

            // Upload
            blockBlob.Properties.ContentType = "text/json";
            blockBlob.UploadFromStream(new MemoryStream(Encoding.UTF8.GetBytes(jsonString)));

基本上:

  1. 检查blob是否存在,
  2. 如果是,请从现有详细信息下载数据并创建json对象。
  3. 如果没有,则创建一个包含详细信息的新对象。
  4. 将更新推送到blob。
  5. 问题在于性能。我已经做了很多事情来提高性能(更新在五个并行线程中运行,我将ServicePointManager.UseNagleAlgorithm设置为false。

    但它仍然运行缓慢。大约100,000次更新可能需要长达一个小时。

    所以我猜基本上,我的问题是:

    1. 我应该使用Azure Blob存储吗? (我愿意接受其他建议)。
    2. 如果有,有关提高绩效的建议吗?
    3. 注意:该文件基本上包含事件历史记录,我无法根据现有数据重新生成整个文件。这就是在更新之前下载内容的原因。

0 个答案:

没有答案