请原谅我可能会在其他地方解释的问题,但我在Cassandra设计数据模型时遇到了麻烦。
我正在存储交易。这些事务每个都有源(用户),时间戳和一些关联的关键字。我需要能够找到给定源和日期范围以及(可选)关键字的交易。 Cassandra很有吸引力,因为我需要存储数十亿笔交易。
我无法找到解释如何执行此类操作的资源。我最初的想法涉及一些CF - 一个事务CF,一个keyword_transaction CF,一个source_transaction CF,以及一个day_transaction CF(或类似的东西)。这样可以很容易地根据上述任何一项找到交易,但似乎不会让我搜索上述所有项目。
有什么想法吗?
答案 0 :(得分:3)
首先考虑您的查询,然后考虑您的数据模型。在计划数据模型时,请阅读here和here作为此帮助。
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 > '';
get transactions where date = '';
get keywords['keyword'];