簡體   English   中英

卡桑德拉表中的主鍵

[英]Primary key in Cassandra's table

我需要創建一個Cassandra表,在該表上將執行特定查詢。

我需要能夠根據日期范圍,類型和一個或多個狀態在此表上進行搜索。 更具體地說,查詢將類似於:

從表中選擇*,日期在范圍內(從,到),類型='某種類型',狀態為IN(狀態1,狀態2,...,狀態N)

由於Cassandra不允許對分區鍵進行比較操作,因此我決定將日期(在Java中為Instant類型)划分為MONTH_YEAR。 例如,日期2015/21/12:19:02:01將轉換為122015(12是該日期的月份,而2015是該日期的年份)。

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

因此,當我想要具有特定類型,狀態和日期范圍內的所有記錄時,我可以執行:從表中選擇*,其中type ='type'and monthAndYear IN'monthAndYear1 monthAndYear2,monthAndYear3'和status IN('status1' ,status2')和日期> =從和日期<=到。

我這里唯一的問題是,該查詢的結果按狀態排序(因為這是表的第一簇列)。 我希望所有記錄都基於日期字段進行排序。

如果我將狀態與日期字段交換,Cassandra在比較后將不允許其他相等謂詞。 如果我從集群列中刪除狀態字段並在其上創建索引,那么當查詢中存在索引列時,Cassandra再次不允許在主鍵的列中進行IN操作。

您能否建議我一些解決方案(如果有)?

謝謝

您可以使用在時間字段中定義的順序來創建主鍵(((類型,狀態),時間),並針對列表中的每個狀態執行時間范圍查詢,並在應用程序上合並結果。 我不知道您的讀取延遲要求是什么,但這應該可以為您提供所需的數據集。 您不能在單個表中提供所有這些查詢模式。 調查SASI索引,也許您可​​以有一個更好的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM