2017-03-05 77 views
1

好吧,我一直在尋找解釋一段時間,但仍然找不到答案。卡桑德拉索引解釋

當我們談論卡桑德拉指數,我得到了要點,其上的是:

  • 做高或非常低的基數數據未使用

在低基數我明白了 - 搜索時我們會得到很寬的行。

但是,在高基數數據的幕後發生了什麼?所有的書籍和博客似乎都複製了datastax的例子,它沒有解釋爲什麼,只是告訴你不要這樣做。

假設我想在用戶電子郵件上創建一個索引。如果我理解正確的,當我搜索用戶通過電子郵件,兩件事情將會發生:

  1. 要求所有節點,其中一個具有通過用戶ID
  2. 從正確的分區與此相關的電子郵件
  3. 獲得用戶的用戶ID

如果我在用戶國家(這似乎是更合適的字段)創建索引,算法應該是相同的。

因此,請解釋我從理解爲什麼在高基數數據上使用索引時錯過了什麼。

另外,關於相關主題:有沒有一種情況,當索引比物化視圖更優先?

回答

0

假設您在電子郵件等高基數列上創建索引。
如果您通過電子郵件查詢用戶標識,cassandra需要在所有主機上執行該查詢才能獲得該用戶標識。你正在查詢所有主機以獲得一個用戶ID,是不是很昂貴?

相反,如果你將不得不在下方建立

CREATE TABLE userid_by_email (
    email text PRIMARY KEY, 
    userid bigint 
); 

這樣的一個表卡桑德拉將通過查詢一臺主機上返回用戶ID。

這裏是你的另一個問題的答案https://stackoverflow.com/a/36476772/2320144

0

總結: 使用索引,當你知道分區鍵,你需要做的是必須打的所有節點,或做的事計數的全文檢索,例如,有多少次你見過發表在博客(有擊中所有節點)的所有文章,你需要像一個特定的值:

WHERE age = 18 

使用物化視圖,當你不知道分區鍵你需要的範圍如下:

WHERE age > 18 and age < 30 

參考文獻:

主要文章!

Cassandra Secondary Index Preview #1

這裏是與物化視圖和二級指標

Materialized View Performance in Cassandra 3.x

這裏是哪裏的PK是已知的比較,更有效地使用索引

Cassandra Native Secondary Index Deep Dive