Cassandra数据模型方法

时间:2012-03-13 21:03:59

标签: cassandra

请原谅我可能会在其他地方解释的问题,但我在Cassandra设计数据模型时遇到了麻烦。

我正在存储交易。这些事务每个都有源(用户),时间戳和一些关联的关键字。我需要能够找到给定源和日期范围以及(可选)关键字的交易。 Cassandra很有吸引力,因为我需要存储数十亿笔交易。

我无法找到解释如何执行此类操作的资源。我最初的想法涉及一些CF - 一个事务CF,一个keyword_transaction CF,一个source_transaction CF,以及一个day_transaction CF(或类似的东西)。这样可以很容易地根据上述任何一项找到交易,但似乎不会让我搜索上述所有项目。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

首先考虑您的查询,然后考虑您的数据模型。在计划数据模型时,请阅读herehere作为此帮助。

cf : transactions
rowkey : source/uuid (suggestion)
  cn : source  
  cv : UTF8
  cn : keyword
  cv : UTF8
  cn : date
  cv : DateType
  cn : time
  cv : DateType


cf : keywords
rowkey : keyword
   cn : source
   cv : UTF8

您将拥有一个名为transactions的标准列族和一些列名(cn)及其对应的列值(cv)。这些事务中的每一个都由rowkey标识。另一个标准列系列是关键字,其中rowkey是关键字。

您可以按来源,时间戳或关键字进行搜索,但您需要index它们才能使查询生效。例如,使用上述建议数据结构,您可以执行以下操作:

  • 获取所有来源等于''的交易    
       get transactions where source = '' 
       
  • 获取所有来源,其中来源等于''和您的日期> “”    
       get transactions where source = '' and date > '';
       
  • 获取日期x的所有交易    
       get transactions where date = '';
       
  • 根据关键字获取所有源名称    
       get keywords['keyword'];