卡桑德拉 - 更新并选择大于的字段



我是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,那么它将支持更新查询,而不是>查询。

但我希望两个查询都得到执行。请任何人指导我使其工作。

如果要执行此操作,则有两种解决方案:

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

  • 使用两个架构创建两个表,这允许您执行这两个请求。如果需要事务插入,可以使用批处理(见此处:https://docs.datastax.com/en/cql/3.3/cql/cql_reference/batch_r.html)。您将确保插入两个数据。

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

最新更新