【问题标题】:Cassandra select rows based on date rangeCassandra 根据日期范围选择行
【发布时间】:2017-01-11 20:57:10
【问题描述】:

这是我的场景,我有表业务,其中包含以下列、代码、名称、描述、日期时间。现在我需要显示日期时间大于当前系统日期时间的那些业务记录的代码和名称。 我应该采用什么策略,这样 cassandra 才能为上述场景提供最佳性能。

谢谢 阿尼

【问题讨论】:

  • 战略是什么意思?

标签: cassandra date-range cql3


【解决方案1】:

我不知道您的数据大小,但由于您想要按日期时间查询并且想要范围,因此该特定列应该是您的最后一个聚类列。这将确保您可以通过它进行查询,也可以进行范围搜索。请记住,在 cassandra 中,如果您在某个列中进行范围搜索,您的查询将立即结束。

例子:

有效查询 select * from table where column1 = something1 and column2 = something2 and datetime > now;

无效查询 select * from table where column1 = something1 and column2 now;

如果您需要更多详细信息或帮助,可以向我们提供您的数据大小以及有关您的用例的更多信息。 无论如何,这个course from datastax 在建模过程中帮助了我很多。我推荐它100%。这是免费的。您只需要注册即可。

【讨论】:

  • 感谢 Reveka 的回复。在我的要求中,我不能使用您建议的任何其他列(column1,column2),因为只允许 datetime 列过滤数据。您是否使用过“SSTable Attached Secondary Index (SASI)”,它允许在不指定主列的情况下执行范围查询。
  • 是的,但我不推荐它。它有一个非常不可预测的行为(至少在我的用例中)。因此,为了弄清楚,您唯一的搜索选项是日期时间?
  • 嗨 Reveka,是的,我的搜索选项只有日期时间,因为用例说,在网页的下拉列表中,我必须只显示日期时间大于当前日期时间的那些业务代码(与其他业务代码一样过去的日期时间是过期的业务代码)
  • 这样的查询通常会返回多少行?如果行数很少(最多几千行),那么您的所有数据都可以存储在一个分区中。这意味着您必须使用伪键作为分区列。例如,假设您将第一列设为 tinyint,然后将第二列设为日期(聚类列)。那么你的查询都是这样的:Select * from table where pseudokey = 1 and date > '2016-08-12'
  • 是的,我可以采取上述方法。如果保存此表的所有数据的节点崩溃,它会成为我的应用程序的单点故障吗?
猜你喜欢
  • 2017-12-30
  • 2016-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-06
  • 2020-02-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多