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