我想在一行中定义一些数据,它本质上是主/详细的。为了说明的目的,让我们假设它是一个由多支球队组成的足球联盟“A级联赛”。球队可以随着时间的推移被添加或删除,或者他们的属性可能会改变,或者联盟的属性可能会改变。
在HBase中,我可以这样定义一个表结构:
Column Family: League
Column: Name
Column: Sponsor
Column Family: Team
Column: team-A
Column: team-B etc
现在,如果我添加以下数据(很抱歉使用了非标准符号,我简化了时间戳,只显示日期部分):
Key Timestamp League { Name Sponsor }
LG-A 2011-01-01 League-A Big-Co
Key Timestamp Team
LG-A 2011-01-01 "The Blues": blues-data
LG-A 2011-01-01 "The Greens": greens-data
LG-A 2011-03-01 "The Reds": reds-data
LG-A 2011-03-10 "The Greens": greens-data2
我想查询指定时间为2011-03-10的LG-A的数据,并得到结果:
Key Timestamp Team
LG-A 2011-01-01 "The Blues": blues-data
LG-A 2011-03-01 "The Reds": reds-data
LG-A 2011-03-10 "The Greens": greens-data2
类似地,当我查询LG-A并指定时间2011-02-01时,我得到的结果是:
Key Timestamp Team
LG-A 2011-01-01 "The Blues": blues-data
LG-A 2011-01-01 "The Greens": greens-data
在HBase中,这是通过在放置数据时设置时间戳,然后设置Get操作的时间范围来完成的。
在Cassandra中可以轻松地做到这一点吗?到目前为止,我只遇到过使用时间戳值编写列名来存储时间序列数据的建议,但这似乎没有给出上面说明的功能(例如,我只想在我的结果中有一个"The Greens“条目,这个条目在指定的时间戳中有效。
发布于 2011-07-20 07:09:34
在HBase中,这是通过在放置数据时设置时间戳,然后设置Get操作的时间范围来完成的。
我相当确定这将导致完整的顺序扫描。
您可以在Cassandra中手动执行seq scan,也可以创建一个包含时间戳的列并对其进行索引。参见http://www.datastax.com/dev/blog/whats-new-cassandra-07-secondary-indexes的示例(使用非ts数据,但原理是相同的)。
https://stackoverflow.com/questions/6746058
复制相似问题