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
关键字,而且由于您使用的名称区分大小写,因此您应该将它们括在引号中。
我计划使用 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
关键字,而且由于您使用的名称区分大小写,因此您应该将它们括在引号中。