Index

沒有完整主鍵的 Cassandra 查詢

  • April 4, 2022

據我了解,沒有多列的二級索引,只有單列。

那麼如何解決我遇到的索引問題呢?這是我的桌子:

CREATE TABLE IF NOT EXISTS logstv.messages (
   timestamp timestamp,
   channelid bigint,
   userid bigint,
   message text,
   PRIMARY KEY ((channelid, timestamp), userid)
) WITH CLUSTERING ORDER BY (timestamp DESC);

但這是目前的錯誤: Missing CLUSTERING ORDER for column userid

我想要這些東西:

  • SELECT WHERE with channelid, userid, timestamp with an order by timestamp and limit
  • SELECT WHERE with channelid, timestamp with a order by timestamp and limit

這可能嗎?

我目前看到的唯一選擇是設置timestamp為主鍵,然後在我的軟體中對其餘部分進行排序,這似乎非常昂貴。或者為我的數據準備 2 個表,我非常想避免這些表,因為數據會增長得非常快並且變大。

範例查詢:

SELECT message, timestamp
       FROM logstv.messages 
       WHERE userid = ? 
       AND channelid = ? 
       AND timestamp >= ? 
       AND timestamp <= ?
       ORDER BY timestamp DESC
       LIMIT 100;

SELECT message, timestamp
       FROM logstv.messages 
       WHERE channelid = ? 
       AND timestamp >= ? 
       AND timestamp <= ?
       ORDER BY timestamp DESC
       LIMIT 100;

是的,可以使用“允許過濾”選項。但不建議(在此連結中有很好的解釋)。Cassandra 中的模式設計主要是特定於查詢(即)設計您的模式,以便它能夠回答查詢。

如果您想查詢不同的屬性,請為每個屬性選擇單獨的模式。

我看不到需要將時間戳放入分區鍵。您可以在 Cassandra 中查看分區

如果您想查詢不在目前表主鍵中的列,您可以使用物化視圖對其他列(每個視圖)執行此操作。 卡桑德拉 3.0

引用自:https://dba.stackexchange.com/questions/218354