如何在cassandra中建模数据以避免无用的重复

5ssjco0h  于 2021-06-10  发布在  Cassandra
关注(0)|答案(1)|浏览(510)

我正在建立一个新的服务来管理一些支付交易。我有四个用例:
读取最后10个事务。
阅读当天的最后一笔交易。
按卡号读取最近10笔交易
读取使用特定设备完成的最后10个事务(例如,设备的id为“device01”)。
为了达到这个目标,我创建了三个表:

CREATE TABLE test.transaction_by_device (
uid  uuid ,
device text,
time timestamp,
amount double, 
currency text, 
cardNumber text,
PRIMARY KEY ((device),time)
) WITH CLUSTERING ORDER BY (time DESC);

CREATE TABLE test.transaction_by_cardNumber (
uid  uuid ,
device text,
time timestamp,
amount double, 
currency text, 
cardNumber text,  
PRIMARY KEY ((cardNumber),time)
) WITH CLUSTERING ORDER BY (time DESC);

CREATE TABLE test.transaction_by_time (
uid  uuid ,
device text,
year text,
month text,
day text,
time timestamp,
amount double, 
currency text, 
cardNumber text, 
PRIMARY KEY ((year,month,day),time)
) WITH CLUSTERING ORDER BY (time DESC);

我使用的查询是:

const select_last_10_transactions_by_time =
    'SELECT * FROM test.transaction_by_time LIMIT 10';
const select_last_10_transactions_of_the_day_by_time =
    "SELECT * FROM test.transaction_by_time WHERE YEAR='2019' AND MONTH='2' AND DAY='22'";
const select_last_10_transactions_by_cardNumber =
    "SELECT * FROM test.transaction_by_cardNumber where cardNumber='4242800217402773' LIMIT 10";
const select_last_10_transactions_by_device =
    "SELECT * FROM test.transaction_by_device where device='device01' ";

一切都很顺利,100万行的选择时间约为0.5秒
问题是每个表中的每个数据都是重复的。在这个用例中,我对数据建模的错误是什么?
有没有更好的方法来优化这些查询/表?
我读了一些关于物化视图的内容,但也读了一些还没有准备好生产的内容。
链接源
谢谢。

lyfkaqu1

lyfkaqu11#

问题是每个表中的每个数据都是重复的。在这个用例中,我对数据建模的错误是什么?
你没有做错,你做对了。磁盘空间通常比尝试分布式连接要便宜得多。尤其是像这样的微小数据。如果有什么问题,我会担心你的分区为一个单一的卡或设备增长太大,因为它本质上是无界的。如果一个客户设置了一个东西,每秒钟就从一个设备上进行一次交易呢?一个月或一年后,这将变得有点难以处理。

相关问题