2016-06-07 4 views
1

Я создал таблицу Кассандры, как это так, с большим количеством информации:Cassandra NodeTool cfstats

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 

Если это невозможно, есть ли другой способ получить количество строк таблицы?

Благодаря

ответ

1

От вашей схемы вашего Partition Key вашего UUID столбец. Каждый ключ раздела - это «строка» для механизма хранения Cassandra. Таким образом, cfstats просто выводит количество ключей разделов (по оценкам, конечно), которые хранятся для этой таблицы.

Я бы проверил и посмотрел, сколько различных UUID у вас есть в вашей системе, если их около 19, тогда все хорошо.

+0

Есть ли другой способ получить количество строк? – hockeybro

+0

Распределенные базы данных, такие как Cassandra, не учитывают все очень хорошо. Я не знаю, какие проблемы вы пытаетесь решить, подсчитав, но если вы хотите придерживаться Cassandra, я бы предложил вам переоценить эти требования. За дополнительной информацией по этой теме я бы посоветовал прочитать: http://www.planetcassandra.org/blog/counting-key-in-cassandra/ – fromanator

+0

Хорошо, так как мой первичный ключ - это комбинация UUID и id, не следует быть больше ключей, выводимых из nodetool netstats? – hockeybro

1

Его не число «строк», его число, если ключи или разделы. В вашей модели данных это будет число уникальных uuid. Обратите внимание, что для 2.0 это число может быть немного, оно подведет количество разделов во всех sstables. Post 2.1.6 он объединит структуру гиперлога, поэтому дубликаты по sstables не будут влиять на нее.

Чтобы получить строку CQL, на самом деле вам нужно прочитать данные, вы можете использовать count или искровое задание, это дорого, поэтому вы можете рассмотреть возможность хранения альтернативной таблицы со счетчиком в ней.

+0

Операция подсчета занимает слишком много времени, поэтому я могу получить ее другим способом? Если мне нужно использовать операцию подсчета, как я могу убедиться, что это не время. Я готов ждать. – hockeybro

+0

вы можете увеличить таймаут чтения в 'cassandra.yaml' и тайм-аут вашего драйвера. В конечном итоге это будет проблемой, хотя для чего-либо вне ежедневных аналитических проверок или чего-то еще. Трудно сказать, что именно вы пытаетесь сделать, но '(uuid, id), timestamp), позволит вам увидеть последние изменения X (добавьте ограничение на запрос с данным uuid/id), а затем оценочные ключи будет ближе к тому, что вы хотите (в 2.1+). –

Смежные вопросы