如何在 Azure Cosmos DB 中使用緩存

Cosmos DB 是微軟在 Azure 云中發布的新 NoSQL 數據庫。與關系數據庫不同,Cosmos DB 是一種托管數據庫服務,因此具有可擴展性,因此在高事務性 .NET 和 .NET Core 應用程序中很受歡迎。

但是,使用 Cosmos DB 時,您需要警惕訪問數據庫的性能瓶頸和成本開銷,因為 Microsoft 會針對 Cosmos DB 的每個事務向您收費。雖然 Cosmos DB 在事務容量方面具有可擴展性,但速度并不快,因為數據庫服務與應用程序位于單獨的 VNet 或訂閱中。因此,即使您的應用程序運行在 Azure 云中,跨 VNet 訪問數據庫也會對性能造成巨大打擊。

因此,為了解決這兩個問題,最好在 Cosmos DB 應用程序中引入緩存。您將看到應用程序性能顯著提高,同時運營成本顯著降低,因為 80-90% 的時間,您的應用程序將從緩存而不是 Cosmos DB 獲取數據。

將緩存與 Cosmos DB 結合使用
以下代碼片段說明了如何在 Cosmos DB 中使用緩存。假設 Cosmos DB 實例包含客戶集合。

根據緩存鍵在緩存中搜索指定客戶。
如果該項目不是緩存,請查詢 Cosmos DB 以搜索客戶。
如果數據庫集合中存在該客戶,則檢索該項目。
將指定客戶添加到緩存,過期值為5分鐘,保證數據一致性。

使用 NCache 作為 Cosmos DB 的分布式緩存
使用 Cosmos DB 時,您的應用程序很可能是通過負載均衡器在多服務器環境中運行的高事務應用程序,并且正在進行大量數據庫調用。此外,在此環境中不可能使用獨立緩存,因此您需要在應用程序和 Cosmos DB 數據庫之間使用像 NCache 這樣的分布式緩存。

您需要分布式緩存,因為它允許您隨著事務負載的增長添加更多緩存服務器,因此緩存永遠不會成為瓶頸。因此,應用程序服務器的數量并不重要,因為您可以在應用程序和數據庫之間擁有足夠的緩存服務器,這與關系數據庫不同,關系數據庫是任何可擴展性的主要瓶頸。

雖然 Cosmos DB 的擴展效率比關系數據庫高得多,但它仍然無法與內存中分布式緩存(例如 NCache)相比,NCache 將與應用程序的 VNet 一起使用。事實上,緩存的一部分將駐留在應用程序進程本身內(稱為客戶端緩存),這為您提供了進程內緩存速度。

圖片標題

與 Azure Cosmos DB 的公共云部署相比,這意味著更短的 RTT。使用緩存減少數據庫命中還意味著請求單位 (RU) 產生的費用更少。了解有關NCache 中的緩存操作的更多信息。

緩存數據庫項目集合
使用分布式緩存,您可以通過減少網絡上的數據庫行程(尤其是讀取操作)來顯著增強 Cosmos DB 應用程序性能。因此,雖然您可以從數據庫中檢索單個實體,但在吞吐量和減少 R/U 方面更經濟的方法是從數據庫中檢索項目集合并在緩存層應用操作。對集合狀態的任何更改都可以在操作結束時推送到數據庫。

為此,NCache 允許將集合緩存為單個緩存項,并緩存集合的各個元素,每個元素都針對其自己指定的緩存鍵。

將集合緩存為單個項目
如果您想要集中加載集合項目(例如所有德國客戶),您可以將集合緩存為單個項目。您可以查詢德國所有客戶的 Cosmos DB,并將結果作為單個列表返回,該列表可以添加到緩存中以供進一步使用。


單獨緩存集合項
您可以將元數據與 NCache 中的緩存項相關聯,以通過唯一標識符(例如標簽)對數據進行分類。這樣,可以根據單個標識符從緩存中檢索多個項目,例如屬于德國的客戶。

為此,您可以在 Cosmos DB 中查詢德國客戶,并關聯一個標簽,例如Customer:Country:Germany 針對結果項目。單獨緩存這些項目將使它們可用于各種查詢組合,甚至可以更快地獲取單個客戶。

使用前面的示例,我們首先在緩存中搜索帶有標簽 的客戶Customer:Country:Germany。如果緩存中不存在項目,請在 Cosmos DB 中查詢 Customer 集合中“Country”屬性指定為“Germany”的項目。但是,由于我們現在想要單獨緩存集合項,因此我們執行以下操作:

從數據庫中獲取項目后,指定項目的到期值。
Customer:Country:Germany為每個緩存項指定標簽。

Azure 中的 NCache 部署
除了下載供現場使用外,Azure 和 AWS 等主要云市場也提供 NCache。對于所有其他云系統,您只需以自帶許可證 (BYOL) 模式在虛擬機上下載并安裝 NCache。NCache 通過以下方式部署在 Azure 中:

在 Azure 中部署 NCache 云
將 NCache 部署為虛擬機
在 Azure 的平臺即服務 (PaaS) 產品中使用 NCache。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210272.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210272.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210272.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

pytorch 鉤子函數hook 詳解及實戰

文章目錄 1. 介紹1.1 pytorch hook 函數種類1.2 pytorch hook 種類1.3 hook的執行順序2. torch.Tensor.register_hook()2.1 功能2.2 語法2.3 案例3. nn.Module.register_forward_pre_hook3.1 功能3.2 語法3.3 案例4. nn

連通分量提取

圖像形態學操作中的提取連通分量是一種用于分離圖像中相互連接的像素區域的技術。這些像素區域通常代表著圖像中的不同物體、目標或者區域。連通分量提取通常用于圖像分割、對象識別、特征提取等領域。 原理: ??連通分量提取基于圖像中像素的連接性。在這個過程中…

ECharts標題字體大小自適應變化

我們在做自適應Echarts的時候,字體大小在配置項里是如下配置的, title 標題組件,包含主標題和副標題。 以下是常用的對標題的設置: title:{//設置圖表的標題text:"主標題",link:"baidu.com", //設置標題超鏈接target:"self",

HCIP —— BGP 基礎 (下)

BGP 的狀態機 --- 建立對等體之間的TCP會話:指定建立對等體的對象 六種狀態機 Idle狀態 Idle 等待狀態(相當于OSPF的down狀態)--- 采用TCP單播建鄰 Idle 狀態下,啟動BGP協議后必須指定建立對等體的目標之后,才能進入…

yaml工作常用語法總結

文章目錄 yaml中的| 符號 和 > 符號yaml中的 - 符號工作中常遇到的問題- 命令行中有冒號加空格,導致yaml解析報錯 yaml中的| 符號 和 > 符號 在 YAML 中,| 符號表示標量塊(Scalar Block)的開始。它用于表示長文本塊或保持多…

代碼隨想錄算法訓練營第四十六天| 139 單詞拆分

目錄 139 單詞拆分 139 單詞拆分 class Solution { public:bool wordBreak(string s, vector<string>& wordDict) {vector<bool>dp(s.size() 1);//長度為i的字符串時能否成功拆分unordered_set<string>set(wordDict.begin(),wordDict.end());dp[0] t…

數據結構 | 查漏補缺之哈希表、最短路徑、二叉樹與森林的轉換

哈希表是什么&#xff1f; 或者說 設圖采用鄰接表的存儲結構&#xff0c;寫對圖的刪除頂點和刪除邊的算法步驟 刪除邊 刪除點 最短路徑問題 參考博文 迪杰斯特拉(Dijkstra)算法_dijkstra算法-CSDN博客 Dijkstra(迪杰斯特拉&#xff09;算法 定義一個點為源點&#xff0c;算源…

5G+AI開花結果,助力智慧安檢落地

“請帶包的乘客過機安檢&#xff01;”&#xff0c;深圳地鐵、騰訊共同打造的5GAI智慧安檢輔助系統亮相福田樞紐站&#xff0c;進一步解放了人力&#xff0c;提高安檢效率&#xff0c;為交通安全保駕護航&#xff0c;讓智慧出行成為現實。 傳統的安檢設備均為人工肉眼辨識&…

java面試題匯總-目錄

堅持記錄和總結一些面試過程中遇到的面試題&#xff0c;以及總結出自己的回答技巧。不用死記硬背也能完整的回答出來。會持續更新&#xff0c;歡迎提出問題和疑問&#xff0c;大家一起總結經驗。 1.Hashmap、Hashtable、ConcurrentHashMap原理 2.談談sql優化-mysql 3.ArrayList…

2023年9月13日 Go生態洞察:WASI支持在Go中的實現

&#x1f337;&#x1f341; 博主貓頭虎&#xff08;&#x1f405;&#x1f43e;&#xff09;帶您 Go to New World?&#x1f341; &#x1f984; 博客首頁——&#x1f405;&#x1f43e;貓頭虎的博客&#x1f390; &#x1f433; 《面試題大全專欄》 &#x1f995; 文章圖文…

21、命令執行

文章目錄 一、命令執行概述1.1 基本定義1.2 原理1.3 兩個條件1.4 命令執行漏洞產生的原因1.5 管道符號和通用命令符 二、遠程命令執行2.1 遠程命令執行相關函數2.2 遠程命令執行漏洞的利用 三、系統命令執行3.1 相關函數3.2 系統命令執行漏洞利用 四、命令執行漏洞防御 一、命令…

Vue筆記(三)深入組件

組件注冊 組件注冊有兩種方式&#xff1a; 全局注冊 可以使用Vue應用實例的.component()方法&#xff0c;讓組件在當前Vue應用中全局可用&#xff0c;.component()方法可以被鏈式調用。全局注冊的組件可以在此應用的任意組件的模版中使用。import { createApp } from vue imp…

阿里云生態離線數倉

1. 大數據開發治理平臺 DataWorks 功能齊全&#xff1a;10多年大數據建設沉淀完整的平臺&#xff0c;覆蓋數據開發治理的全生命周期 簡單易用&#xff1a;全圖形化界面&#xff0c;SQL為主的數據開發方式 安全穩定&#xff1a;雙11日千萬級任務穩定調度&#x…

一:C語言常見概念

一&#xff1a;C語言常見概念 1.認識C語言&#xff1a; ? C語言是人和計算機交流的語言 ? C語言是一門面向過程的語言&#xff0c;而C&#xff0c;Java&#xff0c;Python等是一門面向對象的語言 ? 軟件開發&#xff08;項目&#xff09;&#xff1a;面向過程面向對象 …

maven下載安裝與配置

文章目錄 1. Maven下載2. 配置settings.xml2.1 指定Maven的本地倉庫2.2 配置阿里云提供的鏡像倉庫2.3 配置 Maven 工程的基礎 JDK 版本 3. 配置環境變量3.1 檢查 JAVA_HOME 配置是否正確3.2 配置 MAVEN_HOME3.3 配置PATH3.4 驗證 1. Maven下載 【Maven官網地址】 【Maven下載…

微服務架構下的分布式事務

系統軟件為了實現一定的業務&#xff0c;會將現實中的人、事、物進行抽象表示&#xff0c;并將其映射為系統中的模型。 業務模型大致可以按以下來構建&#xff1a; 1、定義系統中應該存在哪些實體、實體上有哪些屬性。 2、定義實體之間的各種拓撲關系&#xff0c;如從屬、嵌套…

2023五岳杯量子計算挑戰賽數學建模思路+模型+代碼+論文

賽題思路&#xff1a;12月6日晚開賽后第一時間更新&#xff0c;獲取見文末名片 “五岳杯”量子計算挑戰賽&#xff0c;是國內專業的量子計算大賽&#xff0c;也是玻色量子首次聯合移動云、南方科技大學共同發起的一場“企校聯名”的國際競賽&#xff0c;旨在深度融合“量子計算…

Python處理Excel文件并與數據庫匹配做拼接

Python處理Excel文件并與數據庫匹配做拼接 需求&#xff1a;Python處理Excel中數據并于數據庫交互匹配得到賬號信息等其他操作 Python實現 import os import pandas as pd import pymssql import warnings import time# 提取速率函數 def extract_broadband_speed(speed):if…

【外觀模式】SpringBoot集成mail發送郵件

前言 發送郵件功能&#xff0c;借鑒 剛果商城&#xff0c;根據文檔及項目代碼實現。整理總結便有了此文&#xff0c;文章有不對的點&#xff0c;請聯系博主指出&#xff0c;請多多點贊收藏&#xff0c;您的支持是我最大的動力~ 發送郵件功能主要借助 mail、freemarker以及rocke…

Java 泛型相關知識

什么是泛型? Java 泛型(generics)是JDK5中引入的一種參數化類型特性。 為什么使用泛型,使用泛型的好處? 代碼更健壯(只要編譯期沒有警告,那么運行期就不會出現 ClassCastException)代碼更簡潔(不用強轉)代碼更靈活,復用什么是參數化類型: 把類型當參數一樣傳遞<…