在使用我們的中心RavenDb遇到大量中斷後,我們正在尋找在Azure Blob存儲中緩存某些對象。 Redis沒有與ABS相同的SLA保證,因此Redis已被排除從Azure Blob存儲中反序列化對象的最快方法?
這些對象的檢索和反序列化每分鐘都會發生,並且需要非常快地發生。
這是我們試圖用來反序列化的代碼,但它比從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);
}
}
您是否確定什麼是5-6倍慢?是否是反序列化的東西?如果是這樣,你如何與Raven進行反序列化? (我不知道它是什麼)還是它'GetBlockBlobReference'?如果是這樣,我恐怕沒有什麼可以用ABS做。可能會切換爲Azure SQL數據庫? – fharreau
最快的方法應該是用BinaryFormatter存儲和讀取二進制數據,或者你自己做。 – user743414
@fharreau我不知道是什麼導致5-6倍的差異,但我認爲這是關於序列化。但是,RavenDb在內部將其對象存儲爲JSON。 GetBlockBlobReference不調用Azure,只是創建一個內存中的對象 – Igorek