从 Azure Blob 存储反序列化对象的最快方法?

Fastest way to deserialize objects from Azure Blob storage?

在我们的中央 RavenDb 经历了大量中断之后,我们希望在 Azure Blob 存储中缓存某些对象。 Redis 没有和 ABS 一样的 SLA 保证,所以 Redis 已经被排除

这些对象的检索和反序列化每分钟都在发生,并且需要非常快地发生。

这是我们尝试用于反序列化的代码,但它比从 Raven 检索对象慢大约 5-6 倍。无论如何要优化它?对象大小约为 8mb

var blob = container.GetBlockBlobReference(entityId + ".json");

var serializer = new JsonSerializer
{
    ObjectCreationHandling = ObjectCreationHandling.Reuse,
    NullValueHandling = NullValueHandling.Include,
    ReferenceLoopHandling = ReferenceLoopHandling.Serialize,
    PreserveReferencesHandling = PreserveReferencesHandling.All,
    TypeNameAssemblyFormat = FormatterAssemblyStyle.Full,
    TypeNameHandling = TypeNameHandling.All
};

using (var stream = new MemoryStream())
{
    blob.DownloadToStream(stream);
    stream.Position = 0;

    using (var sr = new StreamReader(stream))
    using (var jsonTextReader = new JsonTextReader(sr))
    {
        var accountOut =  serializer.Deserialize<Account>(jsonTextReader);
    }
}

想要速度但不能使用 Redis(无论出于何种原因)?只有一个正确答案:CosmosDB.

速度非常快,并且有 SSD 存储支持。 单个区域内 99.99% 的可用性(如果需要,只需单击门户 UI 即可实现异地复制)。

事实证明,使用单个序列化程序对象而不在循环的每个循环中重新创建是解决问题的方法。曾经,我们开始缓存 JsonSerializer 对象并重新使用它,Blob Storage 的反序列化性能成为 RavenDb 的 50%