私たちは中心のRavenDbで数多くの停止を経験した後、特定のオブジェクトをAzure BLOBストレージにキャッシュしようとしています。レディスはABSと同じSLA保証を持っていないため、レディスは除外されています。Azure BLOBストレージからオブジェクトを逆シリアル化する最速の方法は?
これらのオブジェクトの取得とデシリアライゼーションは毎分発生し、非常に迅速に行われる必要があります。
ここでは、デシリアライズに使用しようとしているコードを示しますが、Ravenからオブジェクトを取得するのに比べて5〜6倍遅くなっています。とにかくそれを最適化するには?オブジェクトのサイズは約8メガバイト
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);
}
}
5-6倍速のものは何ですか?それはデシリアライゼーションのものですか?もしそうなら、あなたはRavenでどのようにデシリアライズしていましたか? (私はそれが何であるかわからない)それは 'GetBlockBlobReference'ですか?もしそうなら、あなたはABSで何もできないのではないかと恐れています。 Azure SQLデータベースを切り替える可能性がありますか? – fharreau
最速の方法は、バイナリデータをBinaryFormatterで保存して読み取るか、自分で行うことです。 – user743414
@fharreau私は5-6xの違いを引き起こしているのか分かりませんが、それはシリアライゼーションに関するものと仮定しています。しかし、RavenDbはそのオブジェクトを内部的にJSONとして保存しています。 GetBlockBlobReferenceはAzureを呼び出しません。単にメモリ内オブジェクトを作成します – Igorek