2012-06-19 23 views
4

1)根據datastax密鑰緩存存儲rowkey的主鍵索引。當多個sstables中存在相同的密鑰時,cassandra密鑰緩存如何工作?

2)在我們的例子中,我們有足夠的內存分配給密鑰緩存,同一個密鑰存在於具有不同列的多個sstable中。

3)如果沒有調用從多個sstables訪問所有這些相同的密鑰,那麼索引如何存儲在密鑰緩存中?它會爲所有sstables存儲索引,還是僅存儲最近從哪個密鑰訪問的最後一個sstable?

+0

我已經正確更新了答案。如果現在清楚,Plz讓我知道。 – Tamil

回答

5

Doc

鍵緩存持有密鑰的存儲在每列 家庭基礎的位置。

密鑰緩存用作所有安全密鑰存在的索引。

按sstable維護密鑰緩存。因此,密鑰緩存可以爲每個SSTable [最小值]保存一次磁盤搜索。每個關鍵字查找最終都會擊中所有sstable的布隆過濾器。在成功時,密鑰緩存被驗證僅僅是跳過sstable索引[默認情況下關鍵示例@間隔爲127的指針]查找。

卡桑德拉

讀取路徑是這樣的

的memTable - >行高速緩存(關堆) - >布隆過濾器 - >鍵緩存 - >的SSTable指數[如果小姐] - >磁盤

一切用黑體表示它們保存在內存中(堆中或堆外)。因此,他們不加起來尋求磁盤

每個sstable應該維護自己的密鑰緩存。 Souce from slide no 101 and Source2 from slide no 23

使用鍵盤緩存未命中,sstable索引被使用 - 這將提供關於哪個鍵可能位於第128個範圍的線索。然後從磁盤尋找密鑰開始[可以是1到很多]。

我會再次更新答案,如果我得到任何線索cassandra如何描述每個sstable的密鑰緩存大小可能是[key_cache_conf/no_of_sstables]?

+0

謝謝泰米爾人!你介意我是否要求一個可覈查的來源... – samarth

+0

@samarth你的意思是可證實的來源是什麼?我已經在答案中提到了文檔資源。即使'鍵盤緩存可以節省一個磁盤尋道每個SSTable'這是從文檔 – Tamil

+0

我希望你的陳述的來源「鍵盤緩存作爲它存在的所有sstables中的鍵索引」任何鏈接或文檔或源代碼將很有幫助。 – samarth