2016-03-02 177 views
1

我很困惑。 何時使用它們以及如何確定使用哪一個? 如果某列是索引/主鍵/行鍵,是否可以重複?cassandra中的行鍵,主鍵和索引有什麼區別?

我想創建一個列族來存儲一些多對多的信息,例如,一列是給定名稱,另一列是姓氏。一個名字可以與許多姓氏有關,而一個姓氏可以有不同的名字。

我需要通過一個給定的名字查詢姓氏,以及通過指定的姓氏查詢給定的姓名。

如何創建表?

謝謝!

回答

1

Cassandra是一個NoSQL數據庫,因此沒有這種多對多關係的概念。理想情況下,表格不應該包含主鍵以外的任何內容。在您的情況下,在Cassandra中建模的正確方法是創建兩個表,一個以名稱作爲主鍵,另一個以姓氏作爲主鍵

當您需要使用任一鍵進行查詢時,需要查詢具有該鍵作爲主鍵

編輯表: 從卡桑德拉文檔:

Cassandra的內置指標是最好的具有 包含索引值,許多行的表。 特定列中存在的唯一值越多,您將平均擁有的查詢和維護索引的開銷就越大。例如,假設你有一個比賽表,其中有數百個參賽者的十億個參賽作品,並且 想要騎自行車者查找排名。許多騎自行車者的隊伍將分享 比賽年的相同列值。 race_year列是索引的候選人,是一個很好的 。

不要在這些情況下使用索引:

  • 在高基數列的記錄爲少數結果的體積龐大的查詢。
  • 在使用計數器列的表中在頻繁更新或刪除的列上。
  • 查找大型分區中的行,除非查詢範圍很窄。
+0

感謝您的回覆。兩張表格是確保他們的內容相同的好方法。當創建表時,我們可以指定主鍵;創建表後,我們可以爲它創建索引。所以它仍然有概念索引和主鍵。當我們查詢時,鍵應該是主鍵還是索引? –

+0

表的任何附加索引都會減慢查詢速度。執行查詢時,應始終查詢主鍵。你可以添加索引,但是每個索引都有性能損失 – TheGeorgeous

+0

那麼索引的目的和好處是什麼? –