2014-03-28 4 views
2

У меня есть следующий номер семейства в Cassandra 2.0.5, используя Murmur3Partitioner. Внутри этого столбца я сохраняю количество явлений с уникальными хэшами в таймфрейме (хеши, извлеченные из событий, происходящих с течением времени - не очень актуальны).Порядок заказа в Кассандре

Мой вариант использования - выбрать все хеши и их количество для заданного периода времени (поле hour).

Поскольку количество данных может быть очень большим, я пытался сделать разбивку на страницы, используя LIMIT и продолжая последний возвращенный хеш, как в примере ниже. Это кажется работать, так как хеши кажется для возврата в отсортированном порядке возрастания.

Может кто-нибудь объяснить, действительно ли это работает и почему? Тем более, что я нашел this link, в котором говорится, что строки ... не упорядочены, поэтому теперь, когда я думаю об этом, хеши следует возвращать случайным образом.

я проверить процедуру подсчета количества строк с использованием постраничного подхода и с помощью COUNT в cqlsh, но я не могу действительно чек, если все правые хэш возвращаются из-за большое количество данных.

cqlsh:db> DESCRIBE COLUMNFAMILY hashes ; 
CREATE TABLE hashes (
    hour text, 
    hash text, 
    count counter, 
    PRIMARY KEY (hour, hash) 
) WITH COMPACT STORAGE AND 
    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'}; 


cqlsh:db> SELECT * FROM hashes WHERE hour = '2014032710' LIMIT 10; 

hour  | hash                | count 
------------+------------------------------------------------------------------+---------- 
2014032710 | 000034d4b821c9af90bbf39cd803d45b25d7c14777697b8d9fc71c3a102c360f |  1 
2014032710 | 000063b39f526788dc026a07abe1bc1365652772e9c66be9a7408b16c61962fa |  2 
2014032710 | 00009c38834cedfb37bfd95355bba1a225aea6ee74f5ddc4ace820bfc33eb7a6 |  1 
2014032710 | 0000a68de59092e0326b3ceff8d9a1167c7f5ea0aac804389c259f336956e520 |  1 
2014032710 | 0000b0fed9e2f8f70e5e46f084be1872f0d1944c0e89a8850e6b7c3be17b8935 |  9 
2014032710 | 0001204a0fb29d3a8ac7164e451662069d19307ea56e014215a64cc606cf4df9 |  1 
2014032710 | 00015c165622a3c8b88d33e471d740088d9b6203dd81235d50ec129c40282229 |  1 
2014032710 | 00019ed1b3287ed808c24146d1f2e145238478b49ad3740fb58cb46bc509965a |  10 
2014032710 | 00019fa833cee60e7a1b8ed5d5c6fbef8c401a144e1537e15c9a5f65672d44fb |  1 
2014032710 | 0001df8d8319524a93ed523382a6cce8de9234211d5f3dc46bb4c530d9385150 |  1 

(10 rows) 

cqlsh:db> SELECT * FROM hashes WHERE hour = '2014032710' AND hash > '0001df8d8319524a93ed523382a6cce8de9234211d5f3dc46bb4c530d9385150' LIMIT 10; 

hour  | hash                | count 
------------+------------------------------------------------------------------+---------- 
2014032710 | 000200428d93eb478c6a9ae0d9daa21fac88ca8dd4e536f60ae992dbea6155d4 |  2 
2014032710 | 00024447d8983fc0f022df4301eb69eca4ccc7cf0fc2e9361046dbaedbe830bc |  1 
2014032710 | 00025c6b3ef861fa3ef047d618f078927c9f8cf875e9b935c8e556189969bc17 |  1 
2014032710 | 00026f67e525bd11b67062e3122eb625799c6878f7812da8f23f0c8e9bd9f9d5 |  2 
2014032710 | 00028ded6dfe5d8616cc0eef559cfdf15fd51d5a36c17f2b9852785e8ca55c27 |  4 
2014032710 | 00028f8fab859c702fe0cc51db390ce7ae85ca97807a751ddf12fed57639239f |  1 
2014032710 | 0002f4046ef35e169fa79e2abf0b92212c1438487819dd8318301991ff99acac |  32 
2014032710 | 000381054a59d46c87164fcfb69952afa1e77acd71f88b25e09eab3eacc1b21a |  1 
2014032710 | 0003aca7fd2cab16a03d79fa7ac1505f144f9ba04fea87a050bef919aa628e74 |  1 
2014032710 | 0003e6a549b01cf1634c1b2844618d4e96ac00d74be30b9401b3fbbbc5bdb7e2 |  1 

(10 rows) 

ответ

2

Пожалуйста, прочтите о сортированных широких рядах и кластеризации КАРТА ЗАКАЗА. Некоторые выдержки из страницы спецификации CQL «Кластер разделения и столбцы кластеризации

В CQL порядок, в котором столбцы определены для важного ключа, является первым столбцом ключа, который называется ключом раздела. строки, разделяющие один и тот же ключ раздела (даже по таблице), хранятся на одном физическом узле. Кроме того, вставка/обновление/удаление в строках, разделяющих один и тот же ключ раздела для данной таблицы, выполняются атомарно и изолированно. возможно иметь составной ключ раздела, то есть ключ раздела, состоящий из нескольких столбцов, с использованием дополнительного набора круглых скобок для определения того, какие столбцы образуют ключ раздела.

Остальные столбцы определения PRIMARY KEY, если таковые имеются, являются называется __clustering колонны. На данном физическом узле строки для данного ключа раздела хранятся в порядке, вызванном столбцами кластеризации, что делает поиск строк в этом порядке кластеризации особенно эффективным (см. SELECT).

"

+0

имеет смысл? Спасибо.! – Unknown

1

Попробуйте использовать функцию токена вместе с лимитом для прокрутки нескольких строк. Поскольку вы определили составной ключ, который обеспечит упорядоченный порядок. Вы также можете посмотреть CLUSTERING KEY ORDER при создании семейства столбцов.

надеюсь, что это поможет. -Vivek

+0

КЛАСТЕРИЗАЦИЯ ORDER кажется интересным, но мой вопрос был„почему кажется, что работать“ – Unknown

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