【问题标题】:Cassandra : Data ModellingCassandra:数据建模
【发布时间】:2015-12-25 09:40:53
【问题描述】:

我目前在 cassandra 中有一个名为 macrecord 的表,它看起来像这样:

 macadd            | position | record | timestamp
-------------------+----------+--------+---------------------
 23:FD:52:34:DS:32 |        1 |      1 | 2015-09-28 15:28:59

但是我现在需要进行查询,这些查询将使用时间戳列来查询范围。如果没有时间戳作为主键的一部分(在这种情况下为 macadd),我认为不可能这样做,即没有它是集群键。

如果我将时间戳作为主键的一部分,表格如下所示:

 macadd            | timestamp           | position | record
-------------------+---------------------+----------+--------
 23:FD:52:34:DS:32 | 2015-09-28 15:33:26 |        1 |      1

但是,现在每当我得到重复的 macadd 时,我都无法更新时间戳列。

update macrecord set timestamp = dateof(now()) where macadd = '23:FD:52:34:DS:32'; 

报错:

message="PRIMARY KEY part timestamp found in SET part"

在这种情况下,我想不出其他解决方案,如果 macadd 存在重复值,则删除整行,然后插入具有更新时间戳的新行。

有没有更好的解决方案来更新时间戳,只要有 macadd 的重复值,或者在我的原始表中只有 macadd 是主键的范围内查询时间戳值的替代方法。

【问题讨论】:

  • 虽然您还没有发布表定义,但我可以告诉您,您所做的并不像在关系世界中那样简单。如果您需要UPDATE 您的时间戳,那么它不能成为您的主键的一部分。
  • @Aaron :如果我不将时间戳添加到主键,那么我将无法使用时间戳执行范围查询。这是我遇到的两个相反的限制。我正在创建一个表,如下所示: CREATE TABLE IF NOT EXISTS HAS.MACRecord (MACAdd VARCHAR PRIMARY KEY,Timestamp timestamp, Record int, position int);是否可以在不作为主键一部分的时间戳上执行范围查询?

标签: cassandra


【解决方案1】:

要在 CQL 中进行范围查询,您需要将时间戳作为集群键。但正如您所见,如果不删除和插入新键,就无法更新键字段。

在 10 月份发布的 Cassandra 3.0 中将提供一个选项是物化视图。这将允许您将时间戳作为基表中的值列和视图中的集群列。查看示例here

【讨论】:

    猜你喜欢
    • 2015-04-09
    • 1970-01-01
    • 2019-09-02
    • 2018-06-16
    • 2018-07-10
    • 2018-04-02
    • 2016-08-20
    • 2019-06-29
    相关资源
    最近更新 更多