【问题标题】:Cassandra - Update And Select Field Greater ThanCassandra - 更新并选择大于的字段
【发布时间】:2016-08-19 20:13:32
【问题描述】:

我是 cassandra 的新手。我需要更新表中的字段,并通过过滤该字段>(大于)条件从该表中选择数据。我怎样才能创建一个表来支持它。谁能帮我解决这个问题?

例如:

CREATE TABLE test (
   id uuid,
   title text,
   start_date timeuuid,   
   PRIMARY KEY (id, start_date)
)

在上表中我希望能够同时执行下面的查询,

update test set start_date = 04940b5e-00a2-11e6-afcd-063929a48e12 WHERE id = 04940b5e-00a2-11e6-afcd-063929a48e11;

select * from test where start_date > 04940b5e-00a2-11e6-afcd-063929a48e11 ALLOW FILTERING;

但是在上面的查询中它只支持第二个。 (即)>

如果我从集群键中删除 start_date,那么它将支持更新查询而不是 > 查询。

但我希望这两个查询都能被执行。请任何人指导我以使其正常工作。

【问题讨论】:

  • timeuuid 就像一个时间戳,不能是字符串。
  • 我刚刚给出了样本值。它只是一个timeuuid。但两个 func 都应该工作
  • 我不明白为什么更新不起作用。如果 start_date 在主键中,这将是一个问题,但对于集群键应该没问题
  • 我的创建表是否正确?
  • 您将 id 作为分区键,并且在分区键中,行按日期排序。在我看来,如果你需要按日期查询,如果可以的话,最好是按日期分区。在您的情况下,您需要查询每个分区以获得结果

标签: java cassandra cassandra-2.0 bigdata nosql


【解决方案1】:

如果你想这样做,你有两个解决方案:

  • 将 (id, start_date) 设置为主键。你不能先在这里表演 查询,因为它就像插入一个新数据:你把一个新的主 钥匙。但是您可以删除要更新的行,然后插入另一个 一个

  • 使用两个模式创建两个表,这样您就可以执行 这两个请求。如果你想要一个事务性插入,你可以使用 批次(见这里: https://docs.datastax.com/en/cql/3.3/cql/cql_reference/batch_r.html)。 您将确定您的两个数据都将被插入。

但是,使用“允许过滤”不是一个好主意:它的性能非常差。仅当您没有其他选择时才使用它,对于不需要性能的少数请求。

【讨论】:

    猜你喜欢
    • 2021-06-13
    • 1970-01-01
    • 2016-07-30
    • 2017-03-15
    • 2020-04-30
    • 1970-01-01
    • 2022-01-17
    • 2012-08-18
    • 2012-08-10
    相关资源
    最近更新 更多