【问题标题】:Cassandra data modeling for calculation用于计算的 Cassandra 数据建模
【发布时间】:2018-03-08 13:57:35
【问题描述】:

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

  1. UUID 是主键。
  2. customer_id
  3. 金额
  4. 其他字段...

365 天内每位客户的交易限额为 100 美元

我有以下 2 个选项

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

  2. 维护一个新表 customer_limit,该表将由 customer_idlimit 字段组成。在对customer_info 进行CRUD 操作之前,我将查询customer_limit 表以了解限制,并根据限制对customer_info 表进行CRUD 操作。

在维护和更快的读/写方面,哪个选项最适合?

【问题讨论】:

  • 第一:如果您的主键仅为 UUID,您将如何查询 customer_id
  • 我忘了提到“customer_id”上的索引

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


【解决方案1】:

我会为此使用 2 个表。

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

在此处参考Counters。它们很容易实现并发增量,避免在应用程序源代码中先读再写。

还请阅读有关分区和集群关键概念的信息。您为customer_info 选择的密钥不是很好。

【讨论】:

    【解决方案2】:

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

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

    (customer_id, transaction_date)
    

    通过在DESC 中进行聚类,订购此表(当然是按日期),您就可以每天高效地查询过去 365 天。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-04
      • 1970-01-01
      • 2015-03-17
      • 2015-09-13
      • 2021-01-11
      • 2015-12-25
      • 2015-04-09
      相关资源
      最近更新 更多