2017-09-14 49 views
0

我有類似下面列一個表:如何在cassandra中創建表結構,該結構支持哪些cluase中的任何列?

  • 符號
  • 區域
  • 國家
  • 位置
  • 日期

我創造了這個表像如下:

CREATE TABLE IF NOT EXISTS INFO (symbol varchar, region varchar, country varchar, location varchar, date date,count varint, PRIMARY KEY(symbol,date)); 

現在我有查詢一套需要支持這個表:

  1. SELECT * FROM信息,其中符號= 'AAA';
  2. select * from info where date ='2017-01-01';
  3. select * from info where count < 5;
  4. select * from info where country ='XXX';
  5. select * from info where location ='XYZ';
  6. select * from info where region ='PQR';

這些所有查詢都不起作用。

簡而言之,我想要支持where子句中所有或任意數量列的表結構。

在Cassandra中可以這樣做嗎?

+0

在卡桑德拉你不能與非主鍵,除非你在其上創建索引查詢。閱讀此:https://www.datastax.com/dev/blog/a-deep-look-to-the-cql-where-clause –

+0

你可以看看我的答案,並告訴我它是否有用。不要忘記標記答案,如果它幫助你接受。 –

回答

1

它看起來像我需要學習一些Cassandra數據建模。我建議你去https://academy.datastax.com/courses並觀看一些課程(更具體地說是DS210和DS220),他們在註冊後可以免費使用。這是我認爲學習Cassandra的最好方法。我知道他們很長,但他們非常有用。

回答你的問題。你總是必須在你的查詢中指定分區鍵(你的例子中的符號),這就是爲什麼:當你插入數據時,Cassandra將散列主鍵並將數據存儲在負責該散列的節點上(這稱爲範圍)。因此,如果您的羣集中有1000個節點,並且您運行了您指定的SELECT查詢之一,那麼Cassandra將如何知道哪個節點具有該數據?可以使用ALLOW FILTERING搜索所有需要的數據的節點,但您可以想象這對於性能來說很糟糕。以下是更好理解的參考:https://www.datastax.com/dev/blog/the-most-important-thing-to-know-in-cassandra-data-modeling-the-primary-key

解決此問題的方法是通過創建具有相同數據但分區鍵不同的多個表。是的,這會產生大量冗餘數據,但這真的很糟糕嗎?

這樣做的第一個代價是您需要購買更多的磁盤空間。但是磁盤空間很便宜,所以它不是什麼大問題。 CPU更昂貴。

第二個代價是您必須執行多次寫操作來保持表的一致性。但與SQL數據庫相比,Cassandra在寫入數據方面速度非常快。讀取更貴,但這對你的情況無關緊要,因爲只能讀取一次數據。

那麼你應該如何做到這一點?

在你的情況下,你將不得不爲你需要的每個新分區鍵創建一個新表。即創建4個新表,其中日期,國家,位置區域作爲分區鍵。

對於計數爲< 5的select語句,它會變得更復雜一點。就像我之前說的,Cassandra想知道數據的位置究竟是什麼分區。因此,計算分區鍵並不會真正起到幫助作用。您還需要在查詢中指定主鍵。像這樣:

select * from info where symbol='AAA' AND count < 5; 

但是,由於count不是聚簇鍵,所以這也不起作用。集羣用於對分區內的數據進行排序。您可以在表中擁有儘可能多的集羣密鑰。集羣密鑰是主鍵的一部分。主鍵的第一部分始終是分區鍵。所有後來的都是集羣密鑰。

CREATE TABLE IF NOT EXISTS INFO (symbol varchar, region varchar, country varchar, location varchar, date date,count varint, PRIMARY KEY(symbol,date,count,)); 

我知道這對於初學者來說都是令人困惑的,但是請記住Cassandra不是SQL數據庫。嘗試觀看我鏈接的一些視頻並閱讀Datastax文檔中的不同概念(它仍然比官方的Cassandra文檔更好)。

下面是一些術語的詞彙表我只是用:https://docs.datastax.com/en/glossary/doc/glossary/glossaryTOC.html

相關問題