【问题标题】:Cassandra NodeTool cfstats countCassandra NodeTool cfstats 计数
【发布时间】:2016-10-07 17:41:09
【问题描述】:

我已经创建了一个这样的 cassandra 表,其中包含大量信息:

CREATE TABLE keyspace.table1 (
uuid blob,
id bigint,
timestamp bigint,
description text,
option1 double,
PRIMARY KEY (uuid, id) ) WITH CLUSTERING ORDER BY (id ASC)
AND bloom_filter_fp_chance = 0.01
AND caching = '{"keys":"ALL", "rows_per_partition":"NONE"}'
AND comment = ''
AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy'}
AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99.0PERCENTILE';

我正在尝试对其运行 nodetool cfstats 以确定行数。我在网上搜索,似乎键数(估计)应该是行数。但是,如下所示,这个数字非常低,所以我知道这不可能。我做错了什么?

Table: table1
    SSTable count: 3
    Space used (live): 195.02 MB
    Space used (total): 195.02 MB
    Space used by snapshots (total): 567.99 KB
    Off heap memory used (total): 61.83 KB
    SSTable Compression Ratio: 0.3936987749701019
    Number of keys (estimate): 19
    Memtable cell count: 612048
    Memtable data size: 14.18 MB
    Memtable off heap memory used: 0 bytes
    Memtable switch count: 6
    Local read count: 2657130
    Local read latency: 0.055 ms
    Local write count: 2409743
    Local write latency: 0.017 ms
    Pending flushes: 0
    Bloom filter false positives: 0
    Bloom filter false ratio: 0.00000
    Bloom filter space used: 64 bytes
    Bloom filter off heap memory used: 40 bytes
    Index summary off heap memory used: 84 bytes
    Compression metadata off heap memory used: 61.71 KB
    Compacted partition minimum bytes: 49.82 KB
    Compacted partition maximum bytes: 85.8 MB
    Compacted partition mean bytes: 27.06 MB
    Average live cells per slice (last five minutes): 1.0160752060827343
    Maximum live cells per slice (last five minutes): 5722
    Average tombstones per slice (last five minutes): 1.0
    Maximum tombstones per slice (last five minutes): 1

如果这不可行,还有其他方法可以获取表格的行数吗?

谢谢

【问题讨论】:

    标签: cassandra datastax cassandra-2.0 nosql


    【解决方案1】:

    从您的架构中,您的分区键是您的 uuid 列。每个分区键都是 Cassandra 存储引擎的“行”。所以 cfstats 只是简单地输出为这个表存储的分区键的数量(当然是估计的)。

    我会检查你的系统中有多少个不同的 UUID,如果它在 19 个左右,那么一切都很好。

    【讨论】:

    • 还有其他方法可以获取行数吗?
    • 像 Cassandra 这样的分布式数据库不能很好地计算事物。我不知道您要通过计数来解决什么问题,但是如果您想坚持使用 Cassandra,我建议您重新评估这些要求。有关该主题的更多信息,我建议阅读:planetcassandra.org/blog/counting-key-in-cassandra
    • 好吧,既然我的主键是UUID和id的组合,那么nodetool netstats不应该输出更多的键吗?
    • 您的架构将 uuid 定义为分区键,id 是集群键。 Cfstats 只能计算分区键的数量,因为这又是存储引擎的“行”。集群列是在 Cassandra 中定义宽行的一种方法,这些行都存储在它们的分区键下。
    • 好的,谢谢!我还有一个问题,在不知道有关表的任何其他信息的情况下,是否可以确定插入表中的最后 x 行?
    【解决方案2】:

    它不是“行”的数量,而是键或分区的数量。在您的数据模型中,它将是唯一 uuid 的数量。请注意,对于 2.0,这个数字可能会偏一点,它将汇总所有 sstable 中的分区数。 Post 2.1.6 它将合并一个 hyperloglog 结构,因此跨 sstables 的重复不会影响它。

    要获取您实际需要读取数据的 CQL 行,您可以使用 count 或 spark 作业,这些都很昂贵,因此可能需要考虑保留一个包含计数器的替代表。

    【讨论】:

    • 计数操作耗时太长,我能不能用其他方法来获取?如果我必须使用计数操作,我如何确保它不会超时。我愿意等待。
    • 您可以增加cassandra.yaml 中的读取超时和驱动程序超时。尽管对于日常分析检查或其他事情之外的任何事情,最终都会遇到麻烦。很难准确说出您要做什么,但 ((uuid, id), timestamp) 会让您看到最新的 X 更改(为具有给定 uuid/id 的查询添加限制),然后估计的键将更接近您想要的(在 2.1+)。
    猜你喜欢
    • 2016-04-07
    • 2014-01-16
    • 2015-03-13
    • 2016-10-26
    • 1970-01-01
    • 2015-01-26
    • 2016-01-15
    • 2018-06-20
    • 2017-05-19
    相关资源
    最近更新 更多