用于计算的Cassandra数据建模

时间:2017-09-27 07:21:24

标签: cassandra nosql cassandra-3.0 spring-data-cassandra

我在cassandra中有customer_info表。它将包含以下列。

  1. UUID是主键。
  2. CUSTOMER_ID
  3. 金额
  4. 其他领域......
  5. 365天内每位客户100美元的交易限额

    我有以下2个选项

    1. 从客户表中选择特定 customer_id 的所有记录。在应用程序代码中进行内存计算;如果交易限额未超过100 $,则在customer_info表中进行插入或更新。

    2. 维护一个新表 customer_limit ,其中包含customer_idlimit个字段。在customer_info上进行CRUD操作之前,我将在customer_limit表上查询以了解限制,并根据限制执行customer_info表上的CRUD操作。

    3. 在维护和更快的读/写方面,哪种选择最适合?

2 个答案:

答案 0 :(得分:1)

我会为此目的使用2个表。

table-2将是一个以limit作为计数器值的计数器表。在插入customer_info表之前,您应始终查询此table-2

请在此处参阅Counters。在应用程序源代码中写入之前,它们很容易进行并发增量,从而避免读取。

另请阅读有关Partion和Clustering关键概念的信息。您选择customer_info的密钥不是很好。

答案 1 :(得分:1)

我认为您必须保留每笔交易的详细信息,因为您需要一个固定光圈(365天)的“移动”窗口,以便在每笔交易中“前进”。

您可以使用以下主键字段对创建transactions表:

(customer_id, transaction_date)

通过按DESC命令对此表进行聚类(按日期排序),您可以随时有效地查询最近365天。