2016-12-30 71 views
2

我是卡桑德拉的新手,所以我讀了十幾篇關於它的文章,因此我瞭解基礎知識。所有教程都會顯示1或2列以及時間範圍內的高效數據檢索。我找不到如何正確建模數據,如果你有更多的條件。具有多個條件的卡桑德拉數據模型

我有一個大的事件規範化的數據庫,具有相當多的欄目,說:

  • 事件類型
  • 時間
  • 電子郵件
  • User_age
  • user_country
  • USER_LANGUAGE
  • 等。

我需要能夠查詢所有列。因此,在RDBMS我會質疑:

SELECT email FROM table WHERE time > X AND user_age BETWEEN X AND X AND user_language = 'nl'等。

我知道我可以做一個單獨的表列,但是後來我還是需要的結果結合起來。也許這不是一個壞的方法,但我懷疑它,因爲沒有子查詢。

我的問題很明顯,我該如何在Cassandra中正確模擬這種數據?

非常感謝!

+0

因此,一個潛在的解決方案是: 爲每個事件類型創建單獨的表。 我們有一個可以用作分區鍵的「merchant_id」列,我們總是查找時間範圍和merchant_id,所以在一個分區上。 我們可以只添加其餘的二級索引嗎?在eventtype表+ merchant_id +時間選擇中可能仍有數百萬行。 –

回答

4

我需要能夠查詢所有列。

讓我在那裏阻止你。在Cassandra中,您可以根據預期的查詢模式創建表,並且通常一個表支持單個查詢。在你的情況下,你有「不少」列,你需要將這些數據複製到設計用於支持每個可能查詢的表中。這很快就會變得很糟糕。

難道我們只是將其餘的作爲二級索引?在eventtype表+ merchant_id +時間選擇中可能仍有數百萬行。

二級索引旨在用於中等基數列。因此,非常低和極高的基數列對二級指標都是不利的。問題在於Cassandra必須選擇一個節點作爲協調者,掃描每個節點上的索引(導致大量網絡時間),然後構建並返回結果集。這是一個糟糕的表現的處方,它面臨着使用分佈式數據庫的最佳實踐。

總之,Cassandra不是這樣的用例的好方案。這聽起來像你希望能夠做OLAP類型的查詢,並且爲此你應該使用一個更適合該目的的工具。

+0

謝謝Aaron foto你的答案。我很希望在集羣密鑰上使用商戶分區密鑰和timuuid會爲該分區創建一個索引,從而保持它的快速。 我不熟悉olap,但它看起來像是用於分析,而不是檢索用戶ID。 (我看着阿帕奇麒麟)。 你認爲什麼會更好?哈託普也許? –

+0

我們將嘗試爲此使用hadoop –