Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cassandra中的计数器如何存储在磁盘上?_Cassandra_Cassandra 3.0 - Fatal编程技术网

Cassandra中的计数器如何存储在磁盘上?

Cassandra中的计数器如何存储在磁盘上?,cassandra,cassandra-3.0,Cassandra,Cassandra 3.0,我无法理解卡桑德拉计数器是如何存储在磁盘上的 创建测试表 create table testcounter ( id text, count counter, PRIMARY KEY(id)) WITH compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'} AND compres

我无法理解卡桑德拉计数器是如何存储在磁盘上的

创建测试表

create table testcounter (
id text,
count counter,
PRIMARY KEY(id))
WITH compaction = {'class': 
'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 
'max_threshold': '32', 'min_threshold': '4'}
AND compression = {'chunk_length_in_kb': '64', 'class': 
'org.apache.cassandra.io.compress.LZ4Compressor'}
nodetool flush test testcounter 
sstabledump /usr/local/var/lib/cassandra/data/test/testcounter-87d6ae20908e11e9a5779f988085883a/mc-1-big-Data.db
添加数据

update testcounter set count = count + 10 where id = 'testrow';
update testcounter set count = count + 10 where id = 'testrow';
update testcounter set count = count + 10 where id = 'testrow';
检查sstable

create table testcounter (
id text,
count counter,
PRIMARY KEY(id))
WITH compaction = {'class': 
'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 
'max_threshold': '32', 'min_threshold': '4'}
AND compression = {'chunk_length_in_kb': '64', 'class': 
'org.apache.cassandra.io.compress.LZ4Compressor'}
nodetool flush test testcounter 
sstabledump /usr/local/var/lib/cassandra/data/test/testcounter-87d6ae20908e11e9a5779f988085883a/mc-1-big-Data.db
来自sstabledump的响应

[
  {
    "partition" : {
      "key" : [ "testrow" ],
      "position" : 0
    },
    "rows" : [
      {
        "type" : "row",
        "position" : 63,
        "cells" : [
          { "name" : "count", "value" : 422215477737628, "tstamp" : "2019-06-16T23:30:34.423470Z" }
        ]
      }
    ]
  }
更新现有数据

update testcounter set count = count + 10 where id = 'testrow';
update testcounter set count = count + 10 where id = 'testrow';
update testcounter set count = count + 10 where id = 'testrow';
齐平

nodetool flush test testcounter
此时,有两组db文件

ls /usr/local/var/lib/cassandra/data/test/testcounter-87d6ae20908e11e9a5779f988085883a/
backups             mc-1-big-Digest.crc32       mc-1-big-Statistics.db      mc-2-big-CompressionInfo.db mc-2-big-Filter.db      mc-2-big-Summary.db
mc-1-big-CompressionInfo.db mc-1-big-Filter.db      mc-1-big-Summary.db     mc-2-big-Data.db        mc-2-big-Index.db       mc-2-big-TOC.txt
mc-1-big-Data.db        mc-1-big-Index.db       mc-1-big-TOC.txt        mc-2-big-Digest.crc32       mc-2-big-Statistics.db
用于mc-1的sstabledump

[
  {
    "partition" : {
      "key" : [ "testrow" ],
      "position" : 0
    },
    "rows" : [
      {
        "type" : "row",
        "position" : 63,
        "cells" : [
          { "name" : "count", "value" : 422215477737628, "tstamp" : "2019-06-16T23:30:34.423470Z" }
        ]
      }
    ]
  }
用于mc-2的sstabledump

[
  {
    "partition" : {
      "key" : [ "testrow" ],
      "position" : 0
    },
    "rows" : [
      {
        "type" : "row",
        "position" : 65,
        "cells" : [
          { "name" : "count", "value" : 422215477737628, "tstamp" : "2019-06-16T23:34:37.245893Z" }
        ]
      }
    ]
  }

看起来没有墓碑,甚至计数器值也没有存储。幕后发生了什么?

在2.1之后,它实际上是先读后写,然后本质上存储一个压缩元组,这不是很明显,也不容易反序列化。也许值得打开jira,让sstabledump反序列化上下文并使其更具可读性


有关更多详细信息,请参见:

哇,我不知道!那么,你是说sstabledump目前甚至不能用计数器对sstables进行反序列化吗?它可以,它只是将组合数据打印出来,而不是提取时间戳值和id,这正是你想要看到的。我明白了。从来没有为计数器创建过墓碑吗?计数器没有墓碑