由查克尔在Rails中查询Cassandra

时间:2014-10-14 07:07:53

标签: ruby-on-rails cassandra cequel

我在Rails中使用Cequel。我想查询类似

的内容
Event.where("started_at >?", Time.now) 
在ActiveRecord中

。但是我不知道如何在续集中这样做。

2 个答案:

答案 0 :(得分:1)

为了在时间戳上执行有效的范围查询,您需要在父对象下对事件进行分组,并使用started_at作为您的群集列(主键中的最后一列) 。因此,举例来说,如果事件属于场地,您可能会设置如下内容:

class Venue
  include Cequel::Record

  key :id, :uuid, auto: true
  column :name, :text

  has_many :events
end

class Event
  include Cequel::Record

  belongs_to :venue
  key :started_at, :timeuuid
  column :ended_at, :timestamp
  column :title, :text
end

这意味着您可以在开始时间范围内有效地执行查询。有几点需要注意:

  • started_at键是一个TimeUUID,用于确保唯一性。 TimeUUID封装了一个时间戳,可以在时间范围内查询
  • 与ActiveRecord不同,模型只能有一个belongs_to声明。它描述了父/子关系。

因此,要创建一个活动,您可以执行以下操作:

venue.events.new(started_at: Cequel.uuid(started_at), ended_at: ended_at)

然后按开始时间查询一系列事件:

venue.events.after(Time.now)

请注意,您不能通过任意列进行范围查询 - 仅通过对主键中的列进行聚类。因此,您无法拥有一个允许start_time end_time进行查询的表格。

答案 1 :(得分:1)

谢谢你的时间。但我通过提供哈希值范围找到了查询的解决方案。 答案是

Event.where(started_at: Time.now..Time.now+30.minutes)