1. 程式人生 > >Cassandra索引詳解

Cassandra索引詳解

頻繁 什麽是 參考 根據 就是 token 3.1 primary create

轉自: https://www.cnblogs.com/bonelee/p/6278943.html

1.什麽是二級索引?

我們前面已經介紹過Cassandra之中有各種Key,比如Primary Key, Cluster Key 等等。如果您對這部分概念並不熟悉,可以參考之前的文章: [Cassandra教程] (四)使用Key的正確姿勢 對於Cassandra來說,一級索引就是Primary Key. 因為查詢的時候,可以直接根據Key算出token然後直接獲取對應的記錄。

而二級索引,作為輔助索引就是為了找到一級索引。然後再通過一級索引找到真正的值

原文鏈接:http://www.flyml.net/2016/09/16/cassandra-tutorial-secondary-index/

2. 二級索引的原理

Cassandra之中的索引的實現相對MySQL的索引來說就要簡單粗暴很多了。他實際上是 自動偷偷新創建了一張表格,同時將原始表格之中的索引字段作為新索引表的Primary Key!並且存儲的值為原始數據的Primary Key

因此,什麽樣的數據、字段適合做二級索引,也就很清楚了。

我們翻譯一下官方的解釋:

參考網址: https://docs.datastax.com/en/cql/3.1/cql/ddl/ddl_when_use_index_c.html

原文鏈接:http://www.flyml.net/2016/09/16/cassandra-tutorial-secondary-index/

3. 什麽時候 不適合 用索引

  1. High-cardinality 列。 相當於這一列的值很多很多的時候。
    1. 因為查詢了很多結果只能取出一小部分數據集
  2. counter 類型的列
  3. 刪除、更新太過頻繁的列
    1. Cassandra刪除、更新數據都會給老數據設置一個Tombstone(墓碑)。當Tombstone的數據查過10K的時候,就會報錯
    2. 再加上需要同步的更新索引表,Tombstone本身的標記也會很消耗資源
  4. 數據集值太多
    1. 原文英文沒怎麽看懂,這是筆者自己的理解。
    2. 再次強調一下:二級索引裏面存儲的是原始數據的Primary Key。因此如果一次查詢的數據過多就會遇到超時異常

總結一下:

就是索引對應的數據值不能太多也不能太少。 太多就超時,太少就浪費資源(需要創建太多的Primary Key)。 同時索引的列還要穩定,不能頻繁的刪除或者更新~

所以個人認為, 能不用Cassandra之中的索引就不要用 ,還不如自己顯示的創建一個

原文鏈接:http://www.flyml.net/2016/09/16/cassandra-tutorial-secondary-index/

4. 如何使用索引

索引的使用非常簡單,參考下面的代碼以及相應的註釋:

-- 創建索引 CREATE INDEX artist_names ON playlists( artist );   -- 查詢 SELECT * FROM playlists WHERE artist = ‘Fu Manchu‘;   -- 優化查詢 SELECT * FROM playlists WHERE id = 62c36092-82a1-3a00-93d1-46196ee77204 AND  artist = ‘Fu Manchu‘;

原文鏈接:http://www.flyml.net/2016/09/16/cassandra-tutorial-secondary-index/

Cassandra索引詳解