我很难理解Cassandra。我写这个问题的时候会让人觉得很困惑,但当我在下面详细说明的时候,问题可能会变得更清楚。
假设我创建了以下数据类型:
CREATE TYPE transaction (
transaction_id UUID,
value float,
transaction_date timestamp,
PRIMARY KEY (transaction_id, transaction_date)
);
ps:我把它当作一个“类”来使用,但这可能是我的逻辑错误,如果不能这样使用,请纠正我。
总之,我还有一个列族,我在其中创建了一个“transaction”数据类型的列表:
CREATE TABLE transactions_history_by_date (
wallet_address UUID,
user_id UUID,
transactions list <transaction>,
PRIMARY KEY (wallet_address, transaction_date))
WITH CLUSTERING ORDER BY (transaction_date DESC);
所以我想知道的是上面这个专栏族是否正确。我想得到一个钱包的所有交易,按交易日期排序(但日期是“交易”数据类型的一列——更复杂的是,在这个列族中有一个交易列表,而不仅仅是一个交易)。
2条答案
按热度按时间hsvhsicv1#
为了进一步说明alex的答案,在您的情况下,我认为最好的方法可能是对您的表进行非规范化。您可以创建如下内容,而不是使用udt:
现在您可以进行以下查询,结果将按日期排序:
SELECT * FROM transactions_history_by_date WHERE wallet_address = ...;
注意,我添加了transaction_id
作为第二个聚类键。如果省略此项,该表将无法保存具有相同钱包地址和相同交易日期的两个交易。这是因为唯一行由主键标识。de90aj5v2#
不,在cassandra中,您只能根据clustering列的值进行排序—在这种情况下,您需要移动
transaction_date
到表本身。。。