当前位置: 首页 > 知识库问答 >
问题:

在cassandra中计数器没有更新

黎玺
2023-03-14

我在更新cf中的新计数器时遇到问题。如果我执行下一个cql语句(特定键是新的):

UPDATE markerstats SET numbermarkers = numbermarkers + 1 WHERE projectid = 4 AND type = 'SNP';

查询执行时没有错误。然后我执行下一个查询:

SELECT * FROM markerstats

我没有得到新更新计数器的行。我尝试过使用datastax java驱动程序、devcenter以及直接通过。cf的定义是:

CREATE TABLE markerstats (
  projectid bigint,
  type text,
  numbermarkers counter,
  numberpartitions counter,
  PRIMARY KEY ((projectid), type)
) WITH
  bloom_filter_fp_chance=0.010000 AND
  caching='KEYS_ONLY' AND
  comment='' AND
  dclocal_read_repair_chance=0.000000 AND
  gc_grace_seconds=864000 AND
  index_interval=128 AND
  read_repair_chance=0.100000 AND
  replicate_on_write='true' AND
  populate_io_cache_on_flush='false' AND
  default_time_to_live=0 AND
  speculative_retry='99.0PERCENTILE' AND
  memtable_flush_period_in_ms=0 AND
  compaction={'class': 'SizeTieredCompactionStrategy'} AND
  compression={'sstable_compression': 'LZ4Compressor'};

我使用cassandra(2.0.7)单节点实例进行测试。

有人知道问题出在哪里吗?

注意:我之前在cf a DELETE语句中执行过

共有2个答案

冯宏浚
2023-03-14

我在ScyllaDB(最新版本4.4.0)中重现了这种情况,它与Cassandra非常相似,支持CQL。如果您以前删除了该行,具有相同WHERE条件的新UPDATE命令将不会将该行插入数据库。这看起来像一个错误,但最好不要删除计数器。相反,您可以将所有计数器值更新为0,而不是删除。

东郭自珍
2023-03-14

多亏了问题中的评论的帮助,我可以设法恢复被删除的计数器:更新cf的gc_grace_seconds为0,并在表上运行一个主要的压缩。

来源:http://grokbase.com/t/cassandra/user/14a9988tww/deleting-counters

看起来删除计数器后对其重用的限制将在大约3年内取消。*版本(https://issues.apache.org/jira/browse/CASSANDRA-9810)

 类似资料:
  • 问题内容: 使用以下代码,应用程序编译后,我立即在徽章图标中得到(2): 我确实尝试了下一个变体:初始化一个新的版本,然后再更新: 但是,当我收到新通知时,它不会更新为+1。有谁知道如何解决? 问题答案: 除非实际打开应用程序,否则不会使用此方法更新徽章编号。如果要在收到通知时更新徽章编号,则需要将json推送通知的Badge属性设置为所需编号。 如果您发送的是普通消息(不使用json),则可以通

  • UPDATE命令用于更新Cassandra表中的数据。 如果在更新数据后看不到任何结果,则表示数据成功更新,否则将返回错误。 在更新Cassandra表中的数据时,通常使用以下关键字: :WHERE子句用于选择要更新的行。 :SET子句用于设置值。 :它用于包括构成主键的所有列。 语法: 又或者 - 注意:使用UPDATE命令并且给定的行可用时,UPDATE会创建一个新行。 示例: 我们举个例子来

  • 我希望执行一个(Postgre)SQL本机查询,它既不是“选择”查询,也不是“更新”查询,也不是“删除”查询。它是“刷新物化视图名称”据我所知没有结果。 使用JPA/JPQL执行此类查询的正确方法是什么? 似乎需要结果集或更新/删除计数。

  • 我在cassandra集群中添加了一个新节点(新节点不是种子节点)。现在我的集群上有3个节点: 我的复制因子为3: 我还尝试更改该选项,但数据仍然没有复制到新节点:auto_bootstrap:true 你能帮我理解为什么数据没有在新节点上复制吗? 请让我知道,如果你需要从我的配置进一步的信息。 谢谢你的帮助

  • 我正在努力练习techniqual测试,我必须计算DNA序列中的字符数,但无论我做什么,计数器都不会更新,这真的很令人沮丧,因为我用ruby学习代码,它会更新,但Java似乎有一个问题。我知道我的语法有问题,但是我怎么也想不出来。 如果满足条件并重新分配值,它只会一直返回零,而不是加一。