2016-05-26 31 views
0

我需要創建一個Cassandra表,其中特定的查詢將採取行動。Cassandra表中的主鍵

我需要能夠根據日期範圍,類型和一個或多個狀態在此表上進行搜索。更具體地,該查詢將是這樣的:

SELECT * FROM表,其中日期範圍(從,到)和類型= '一些類型' 和狀態IN(STATUS1,STATUS2,...,statusN)

由於Cassandra不允許對分區鍵進行比較操作,因此我決定將日期(Java中的即時類型)分解爲MONTH_YEAR。例如,2015/21/12:19:02:01的日期將被轉換爲122015(12是該日期的2015和2015年)。

到目前爲止,我對分區鍵的想法是: ((type,monthAndYear),status,date,uuid)。

所以,當我想有一個特定的類型,狀態和日期範圍內的所有記錄,我可以執行: SELECT * FROM表其中type =「類型」和monthAndYear IN「monthAndYear1 monthAndYear2,monthAndYear3」和狀態IN('status1',status2')和日期> =來自並且日期< = to。

我唯一的問題在於,這個查詢的結果是按狀態排序的(因爲這是表的第一個集羣列)。我希望根據日期字段對所有記錄進行排序。

如果我將狀態與日期字段交換,Cassandra在比較後不允許使用另一個相等謂詞。 如果我從集羣列中刪除狀態字段並在其上創建索引,那麼當查詢中存在索引列時,Cassandra不允許在主鍵的列中進行IN操作。

你能否建議我解決一些問題(如果有的話)?

感謝

+0

http://stackoverflow.com/help/mcve **代碼** – theblindprophet

回答

0

您可以創建一個主鍵((類型,狀態),時間)對時間字段定義和應用程序執行的時間範圍爲查詢您的列表中的每個狀態和合並結果的排序。我不知道你的讀取延遲要求是什麼,但是這應該給你一個理想的數據集。您無法從單個表中提供所有這些查詢模式。看看SASI指數,也許你可以有更好的解決方案。