Cassandra 2.0,CQL 3.x 更新 ...使用时间戳

Cassandra 2.0, CQL 3.x Update ...USING TIMESTAMP

我计划使用 Update...USING TIMESTAMP... 语句来确保我不会用陈旧数据覆盖新数据,同时至少要避免 LOCAL_QUORUM 次写入。

这是我的 table 结构。

Table=DocumentStore
DocumentID (primaryKey, bigint)
Document(text)
Version(int)

如果服务收到 2 个 Version=1 和 Version=2 的写请求,不管到达的顺序如何,业务需求是我们最终在数据库中的 Version=2。

我可以使用下面的 CQL 语句吗?

Update DocumentStore using <versionValue>
SET  Document=<documentValue>,
Version=<versionValue>
where DocumentID=<documentIDValue>;

有人用过这样的东西吗?如果是这样,行为是否符合预期?

是的,这是一种已知技术。虽然应该是

UPDATE "DocumentStore" USING TIMESTAMP <versionValue>
SET  "Document" = <documentValue>,
"Version" = <versionValue>
WHERE "DocumentID" = <documentIDValue>;

您错过了一个 TIMESTAMP 关键字,而且由于您使用的名称区分大小写,因此您应该将它们括在引号中。