Index
沒有完整主鍵的 Cassandra 查詢
據我了解,沒有多列的二級索引,只有單列。
那麼如何解決我遇到的索引問題呢?這是我的桌子:
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