Cassandra 文件

版本

您正在檢視預發行版本的說明文件。

設定 SAI 索引

為儲存附加索引 (SAI) 設定 Apache Cassandra 環境需要對 cassandra.yaml 檔案進行一些重要的自訂。

將檔案快取增加到高於預設值

預設情況下,檔案快取的 file_cache_size 值會計算為 MaxDirectMemorySize 設定的 50%。這個 file_cache_size 預設值可能會導致次佳效能,因為 Cassandra 無法充分利用可用記憶體。

檔案快取也稱為區塊快取。

可以在 cassandra.yaml 中明確定義 file_cache_size 值。建議

  1. 增加 --XX:MaxDirectMemorySize,為作業系統和其他記憶體中結構保留約 15-20% 的記憶體。

  2. cassandra.yaml 中,明確將 file_cache_size 設定為該值的 75%。

在測試中,此設定會改善讀取、寫入和混合讀寫場景中的索引效能。

壓縮策略

讀取查詢會在產生較少 SSTable 的壓縮策略中執行得更好。

對於包含 SAI 索引的大多數環境,建議使用預設的 SizeTieredCompactionStrategy (STCS)。此策略會在磁碟上出現多個大小相似的 SSTable 時觸發次要壓縮,如表格子屬性 min_threshold 所設定。次要壓縮不會涉及鍵空間中的所有表格。有關詳細資訊,請參閱 設定壓縮

對於時間序列資料,另一種選擇是 TimeWindowCompactionStrategy (TWCS)。TWCS 使用一系列時間視窗來壓縮 SSTable。在時間視窗中,TWCS 會使用 STCS 將所有從記憶體中清除的 SSTable 壓縮成較大的 SSTable。在時間視窗結束時,所有這些 SSTable 都會壓縮成單一 SSTable。然後下一個時間視窗會開始,並且這個程序會重複。時間視窗的持續時間是唯一需要的設定。請參閱 TimeWindowCompactionStrategy。如需有關 TWCS 的更多資訊,請參閱 時間視窗壓縮策略

一般來說,除非索引查詢限制代碼範圍(直接限制或透過限制分割鍵),否則請勿使用 LeveledCompactionStrategy (LCS)。不過,如果您決定使用 LCS,請使用下列準則

  • 主題中所述的 CREATE TABLE 指令的 sstable_size_in_mb 選項的預設值 160 MB,對於未限制代碼範圍或分割鍵的索引查詢,可能會導致效能不佳。

  • 儘管較高的值可能很適當,具體取決於您的硬體,但 DataStax 建議至少將 sstable_size_in_mb 的預設值加倍。

範例

CREATE TABLE IF NOT EXISTS my_keyspace.my_table
.
.
.
   WITH compaction = {
     'class' : 'LeveledCompactionStrategy',
     'sstable_size_in_mb' : '320' };

在增加 MB 值後,觀察具有 SAI 索引的表格的查詢效能是否改善。若要觀察每個查詢的效能差異,請查看 Cassandra 查詢指標中的 QueryLatencySSTableIndexesHit 資料。

使用較大的值會保留較多的磁碟空間,因為 SSTable 較大,而準備更換的 SSTable 在壓縮時會使用較多的空間。不過,較大的值會導致 SSTable 較少,這會降低查詢延遲。每個 SAI 索引最終應會消耗較少的磁碟空間,因為較大的索引具有較佳的長期壓縮效果。

如果查詢效能會在大型(sstable_max_size ~2GB)SAI 編制索引的 SSTable 上降低,而工作負載並非以讀取為主,但寫入放大卻增加,請考慮使用統一壓縮策略 (UCS)。

關於 SAI 加密

對於 SAI 索引,其磁碟元件只是額外的 SSTable 資料。為保護敏感的使用者資料,包括表格分割鍵值中出現的任何資料,SAI 需要加密索引中包含使用者資料的所有部分,也就是字串的 trie 索引資料和數字的 kd 樹資料。根據設計,SAI 不會加密非使用者資料,例如張貼資料或 SSTable 層級的偏移和代碼。