Читает ли Кассандра всю строку при ограничении количества запрашиваемых результатов?

Я использую кассандру 2.0.6. и иметь эту таблицу:

CREATE TABLE t (
    id text,
    idx bigint,
    data bigint,
    PRIMARY KEY (id, idx)
)

Скажем, я получил эти строки:

id / idx / data
x    1     data1
x    2     data2
x    3     data3

.... продолжается, скажем, 1000 строк для х

Если я сделаю запрос:

select * from t where id='x' order by idx limit 1

Сможет ли Кассандра извлечь все 1000 рядов или только небольшую ее часть?

Чтение таких статей, как http://www.ebaytechblog.com/2012/08/14/cassandra-data-modeling-best-practices-part-2/, кажется, что оно принесет только небольшую его часть. Но, выполняя некоторые стресс-тесты, и чем больше у меня данных в таблице, тем больше получается дискового ввода-вывода в МБ / с.

Для 8 ГБ данных я получал 3 МБ / с ввода-вывода (читает) Для 12 ГБ данных я получал 15 МБ / с ввода-вывода (читает) Для 20 ГБ данных я в настоящее время получаю 35 МБ / с ввода-вывода (читает)

Я не вижу ничего странного в cfhistograms:

SSTables per Read
1 sstables: 421010
2 sstables: 552
3 sstables: 9
4 sstables: 0
5 sstables: 254
6 sstables: 3221
7 sstables: 3063
8 sstables: 1029
10 sstables: 143

Read Latency (microseconds)
12 us: 6
14 us: 36
17 us: 471
20 us: 2795
24 us: 10799
29 us: 18594
35 us: 24693
42 us: 43078
50 us: 67438
60 us: 68872
72 us: 70718
86 us: 47300
103 us: 23471
124 us: 11752
149 us: 4509
179 us: 1437
215 us: 832
258 us: 3444
310 us: 7883
372 us: 2374
446 us: 736
535 us: 624
642 us: 581
770 us: 1875
924 us: 1715
1109 us: 2889
1331 us: 3705
1597 us: 2197
1916 us: 1320
2299 us: 826
2759 us: 639
3311 us: 431
3973 us: 312
4768 us: 213
5722 us: 106
6866 us: 72
8239 us: 44
9887 us: 36
11864 us: 25
14237 us: 16
17084 us: 23
20501 us: 20
24601 us: 15
29521 us: 28
35425 us: 21
42510 us: 20
51012 us: 49
61214 us: 49
73457 us: 29
88148 us: 23
105778 us: 35
126934 us: 23
152321 us: 17
182785 us: 13
219342 us: 10
263210 us: 8
315852 us: 3
379022 us: 8
454826 us: 10

3 ответа

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

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

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

создать табличное имя таблицы (.......) с кластерным порядком по (idx desc)

Таким образом, все ваши вставки упорядочены по idx по убыванию по умолчанию. Следовательно, когда вы применяете ограничение к нему, вы должны уменьшить дисковый ввод-вывод

Я обнаружил, что я фактически исчерпал итератор набора результатов, исправил это, и теперь IO - это нормально.

Другие вопросы по тегам