我有大约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)));
基本上:
问题在于性能。我已经做了很多事情来提高性能(更新在五个并行线程中运行,我将ServicePointManager.UseNagleAlgorithm
设置为false。
但它仍然运行缓慢。大约100,000次更新可能需要长达一个小时。
所以我猜基本上,我的问题是:
注意:该文件基本上包含事件历史记录,我无法根据现有数据重新生成整个文件。这就是在更新之前下载内容的原因。