【问题标题】:Using Insert with timestamp in Cassandra在 Cassandra 中使用带有时间戳的插入
【发布时间】:2015-04-19 13:35:55
【问题描述】:

我正在尝试使用时间戳在 Cassandra 中插入(也包括更新和删除)数据,但表没有发生任何变化。有什么帮助吗?

BEGIN BATCH
  INSERT INTO transaction_test.users(email,age,firstname,lastname) VALUES ('1',null,null,null) USING TIMESTAMP 0;
  INSERT INTO transaction_test.users(email,age,firstname,lastname) VALUES ('2',null,null,null) USING TIMESTAMP 1;
  INSERT INTO transaction_test.users(email,age,firstname,lastname) VALUES ('3',null,null,null) USING TIMESTAMP 2;         
APPLY BATCH;

【问题讨论】:

  • 你能发表你的CREATE TABLE声明吗?
  • CREATE TABLE 用户(名字文本、姓氏文本、年龄整数、电子邮件文本、主键(电子邮件));
  • 看起来不错。你能发布你的CREATE KEYSPACE 声明吗?
  • CREATE KEYSPACE transaction_test WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };
  • 当你描述你的keyspace时,durable_writes的值是多少?

标签: cassandra


【解决方案1】:

我认为您陷入了 Cassandra 的“时间戳控制”。只有当新操作的时间戳比前一个操作“”时,C* 中的操作才会执行。

让我们看一个例子。鉴于以下插入

INSERT INTO test (key, value ) VALUES ( 'mykey', 'somevalue') USING TIMESTAMP 1000;

您希望这是输出:

select key,value,writetime(value) from test where key='mykey';

 key   | value     | writetime(value)
-------+-----------+------------------
 mykey | somevalue |             1000

而且它应该是这样的,除非你之前有人没有对这个信息执行更高时间戳的操作。例如,如果你现在写

INSERT INTO test (key, value ) VALUES ( 'mykey', '999value') USING TIMESTAMP 999;

这是输出

select key,value,writetime(value) from test where key='mykey';

 key   | value     | writetime(value)
-------+-----------+------------------
 mykey | somevalue |             1000

如您所见,值和时间戳均未更新。

【讨论】:

    猜你喜欢
    • 2020-01-31
    • 2018-10-06
    • 2015-08-24
    • 2017-03-06
    • 1970-01-01
    • 2015-11-19
    • 2015-12-20
    • 2014-05-10
    • 1970-01-01
    相关资源
    最近更新 更多