Подтвердить что ты не робот

Количество строк в колонке в Кассандре

Есть ли способ получить счетчик строк (количество ключей) одного семейства столбцов в Кассандре? get_count может использоваться только для подсчета столбцов.

Например, если у меня есть семейство столбцов, содержащее пользователей, и вы хотите получить количество пользователей. Как я могу это сделать? Каждый пользователь - это собственная строка.

4b9b3361

Ответ 1

Если вы работаете с большим набором данных и поддерживаете хорошее приближение, я настоятельно рекомендую использовать команду:

nodetool --host <hostname> cfstats

Это выведет список для каждого семейства столбцов, который выглядит следующим образом:

Column Family: widgets
SSTable count: 11
Space used (live): 4295810363
Space used (total): 4295810363
Number of Keys (estimate): 9709824
Memtable Columns Count: 99008
Memtable Data Size: 150297312
Memtable Switch Count: 434
Read Count: 9716802
Read Latency: 0.036 ms.
Write Count: 9716806
Write Latency: 0.024 ms.
Pending Tasks: 0
Bloom Filter False Postives: 10428
Bloom Filter False Ratio: 1.00000
Bloom Filter Space Used: 18216448
Compacted row minimum size: 771
Compacted row maximum size: 263210
Compacted row mean size: 1634

Строка "Число клавиш (оценка)" - это хорошая догадка в кластере, а производительность намного быстрее, чем явные подсчеты.

Ответ 2

Если вы используете хранитель, сохраняющий порядок, вы можете сделать это с помощью get_range_slice или get_key_range.

Если это не так, вам нужно будет хранить идентификаторы пользователя в специальной строке.

Ответ 3

Я нашел отличную статью об этом здесь. http://www.planetcassandra.org/blog/post/counting-keys-in-cassandra

выберите count (*) из cf limit 1000000

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

Ответ 4

[Изменить: этот ответ устарел, как и Cassandra 0.8.1 - см. Запись счетчиков в Cassandra Wiki для правильный способ обработки столбцов столбцов в Кассандре.]

Я новичок в Cassandra, но я много перепутал с Google App Engine. Если другое решение не представлено, вы можете рассмотреть возможность сохранения отдельного счетчика на платформе, поддерживающей операции с атомарным приращением, такие как memcached. Я знаю, что Cassandra работает над функциональностью Atom increment/Decment, но она еще не готова к прайм-тайм.

Я могу опубликовать только одну гиперссылку, потому что я новичок, поэтому для продвижения по поддержке счетчика см. ссылку в моем комментарии ниже.

Обратите внимание, что этот поток предлагает ZooKeeper, memcached и redis как возможные решения. Мои личные предпочтения были бы memcached.

http://www.mail-archive.com/[email protected]/msg03965.html

Ответ 5

Всегда есть карта/сокращение, но это, вероятно, само собой разумеется. Если у вас есть это с ульем или свиньями, вы можете сделать это для любой таблицы в кластере, хотя я не уверен, что tasktrackers знают о местонахождении cassandra, и поэтому, возможно, вам придется передавать всю таблицу по сети, чтобы вы могли отслеживать задачи на cassandra но данные, которые они получают, могут быть из другой cassandra node:(. Мне бы очень хотелось услышать, если кто-то знает наверняка.

ПРИМЕЧАНИЕ. Мы создаем карту/сокращение на кассандре, главным образом потому, что, если мы хотим получить индекс позже, мы можем отобразить/уменьшить его в cassandra.

Ответ 6

Я получаю такие подсчеты после преобразования данных в хэш в PHP.