在经历了大量的中央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);
}
}发布于 2017-08-13 19:31:55
事实证明,使用单个序列化器对象,而不是在循环的每个周期中重新创建是解决问题的方法。一旦我们开始缓存JsonSerializer对象并重用它,Blob存储的反序列化性能就会达到RavenDb的50%。
发布于 2017-08-10 18:41:07
想要速度而不能使用Redis (不管出于什么原因)?只有一个正确的答案:CosmosDB。
它非常快,并支持SSD存储。单个区域内99.99%的可用性(如果需要,只需通过Portal单击即可实现geo复制)。
https://stackoverflow.com/questions/45615982
复制相似问题