數據緩存

配置數據緩存

Cassandra包含集成緩存並在集羣周圍分發緩存數據。當某個節點關閉時,客戶端可以從另一個緩存的數據副本中讀取數據。集成架構還有助於排除故障,因爲沒有獨立的緩存層,緩存的數據與數據庫中的數據完全匹配。集成的緩存通過將緩存定期保存到磁盤來緩解冷啓動問題。Cassandra將內容讀回緩存並在重新啓動時分發數據。羣集不會以冷藏緩存開始。

保存的密鑰緩存文件包括文件名中的表的ID。鍵空間中的users表的保存密鑰緩存文件名mykeyspace類似於:
mykeyspace-users.users_name_idx-19bd7f80352c11e4aa6a57448213f97f-KeyCache-b.db2046071785672832311.tmp

關於分區鍵緩存

分區鍵高速緩存是Cassandra表的分區索引的高速緩存。使用密鑰緩存而不是依靠操作系統頁面緩存減少了查找時間。只啓用密鑰緩存會導致磁盤(或操作系統頁面緩存)活動實際讀取所請求的數據行,但不啓用密鑰緩存會導致從磁盤讀取更多內容。

關於行緩存

通過設置rows_per_partition表選項來配置要在分區中緩存的行數 。要緩存row ,如果row key不在緩存中,Cassandra將讀取分區的第一部分,並將數據放入緩存中。如果新緩存的數據不包含用戶配置的所有單元,則Cassandra將執行另一個讀取。row緩存的實際大小取決於工作負載。您應該對您的應用程序進行適當的基準測試,以獲得“the best”的row緩存大小配置。

有兩個行緩存選項,舊的序列化緩存提供程序和一個新的卸載緩存(OHC)提供程序。新的OHC提供商的基準測試表現比舊版本好15%左右。

注意:使用適當的OS頁面緩存會比使用行緩存帶來更好的性能。

使用row key緩存和row緩存

通常,您爲表啓用partition key或row緩存。

  • 僅當讀取次數大於寫入次數(經驗法則爲95%)時才啓用行緩存。考慮使用操作系統頁面緩存而不是行緩存,因爲寫入分區會使緩存中的整個分區無效。

  • 完全禁用不常讀取的歸檔表的緩存。

啓用和配置緩存

使用CQL通過配置緩存表屬性來啓用或禁用緩存。在cassandra.yaml文件中設置參數以配置全局緩存屬性:

  • 分區鍵高速緩存大小

  • 行緩存大小

  • Cassandra多久分配一次密鑰緩存到磁盤

  • Cassandra多久將行緩存保存到磁盤
    配置row_cache_size_in_mb(位於cassandra.yaml 配置文件中)決定了Cassandra分配的內存空間,以便從表中最常讀取的分區中存儲行。

步驟

設置配置分區鍵高速緩存和行高速緩存的表高速緩存屬性。

CREATE TABLE users (
  userid text PRIMARY KEY,
  first_name text,
  last_name text,
)
WITH caching = { 'keys' : 'NONE', 'rows_per_partition' : '120' };

有效緩存使用技巧

在Cassandra 2.1中調整行緩存描述了使用內置緩存機制和設計有效數據模型的最佳實踐。有效緩存使用的一些提示是:

  • 將需求較低的數據或具有極長分區的數據存儲在表中,而不需要緩存。

  • 在每個節點相對較輕的負載下部署大量的Cassandra節點。

  • 從邏輯上將嚴重讀取的數據分離成離散的表格。

查詢表時,打開跟蹤來檢查表實際上是從緩存而不是從磁盤獲取數據。您第一次從分區讀取數據時,跟蹤在查詢下面顯示此行,因爲緩存尚未填充:

Row cache miss [ReadStage:41]

在隨後的同一分區查詢中,在跟蹤中查找如下所示的一行:

Row cache hit [ReadStage:55]

該輸出意味着在緩存中找到了數據,並且沒有發生磁盤讀取。更新使緩存失效。如果查詢緩存中的行和未緩存的行,請求比全侷限制允許的更多的行,或者查詢不抓取分區的開始,那麼跟蹤可能包含如下所示的行:

Ignoring row cache as cached value could not satisfy query [ReadStage:89]

此輸出表示緩存不足導致磁盤讀取。請求行不在分區的開始是可能的原因。嘗試刪除可能導致查詢跳過分區開頭的約束,或者對查詢設置限制以防止結果溢出緩存。要確保查詢命中緩存,請嘗試增加緩存大小限制,或重新構建表以將頻繁訪問的行放在分區的開頭。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章