我在cassandra有 customer_info
表 . 它将包含以下列 .
-
UUID是主键 .
-
customer_id
-
金额
-
其他领域......
100$ transaction limit for each customer during a 365 days .
我有以下2个选项
-
从客户表中选择特定 customer_id 的所有记录 . 在应用程序代码中进行内存计算;如果事务限制未超过100 $,则在customer_info表中执行插入或更新 .
-
维护一个新表 customer_limit ,其中包含
customer_id
和limit
个字段 . 在customer_info
上进行CRUD操作之前,我将查询customer_limit
表以了解限制,并根据限制执行customer_info
表上的CRUD操作 .
在维护和更快的读/写方面,哪种选择最适合?
2 回答
我会为此目的使用2个表 .
table-2
将是一个计数器表,其中limit
作为计数器值 . 在插入customer_info表之前,应始终查询此table-2
.请参阅Counters . 在应用程序源代码中写入之前,它们很容易进行并发增量,从而避免读取 .
另请阅读Partion和Clustering关键概念 . 您选择的
customer_info
键不是很好 .我认为您必须保留每笔交易的详细信息,因为您需要一个固定光圈(365天)的“移动”窗口,在每次交易中“前进” .
您可以使用以下主键字段对创建
transactions
表:通过在
DESC
中对此表进行聚类(当然是按日期),您可以始终有效地每天查询最近365天 .