Как работает файл yaml cassandra-stress?
Я смотрю файл yaml для cassandra-stress:
# Keyspace name and create CQL
#
keyspace: stressexample
keyspace_definition: |
CREATE KEYSPACE stressexample WITH replication = {'class': 'NetworkTopologyStrategy', 'AWS_VPC_US_WEST_2': '2'};
#
# Table name and create CQL
#
table: eventsrawtest
table_definition: |
CREATE TABLE eventsrawtest (
host text,
bucket_time text,
service text,
time timestamp,
metric double,
state text,
PRIMARY KEY ((host, bucket_time, service), time)
) WITH CLUSTERING ORDER BY (time DESC)
#
# Meta information for generating data
#
columnspec:
- name: host
size: fixed(32) #In chars, no. of chars of UUID
population: uniform(1..600) # We have about 600 hosts with equal events per host
- name: bucket_time
size: fixed(18)
population: uniform(1..288) # 288 potential buckets
- name: service
size: uniform(10..100)
population: uniform(1000..2000) # 1000 - 2000 metrics per host
- name: time
cluster: fixed(15)
- name: state
size: fixed(4)
#
# Specs for insert queries
#
insert:
partitions: fixed(1) # 1 partition per batch
batchtype: UNLOGGED # use unlogged batches
select: fixed(10)/10 # no chance of skipping a row when generating inserts
#
# Read queries to run against the schema
#
queries:
pull-for-rollup:
cql: select * from eventsrawtest where host = ? and service = ? and bucket_time = ?
fields: samerow # pick selection values from same row in partition
get-a-value:
cql: select * from eventsrawtest where host = ? and service = ? and bucket_time = ? and time = ?
fields: samerow # pick selection values from same row in partition
Я нашел этот файл в Интернете, и я не совсем понимаю, как он работает.
Во-первых, я не понимаю columnspec. Для столбцов разделаhost
,bucket_time
,service
, там написано:
population: uniform(1..600) # We have about 600 hosts with equal events per host
population: uniform(1..288) # 288 potential buckets
population: uniform(1000..2000) # 1000 - 2000 metrics per host
Означает ли это, что у меня будет не более 600*288*2000 разделов? Это общее количество разделов, которое у меня будет при запуске cassandra-stress? Это означает, что когда стресс-тест будет выполнен, максимальное количество разделов, которые я увижу, будет 600*288*2000? И максимальное количество столбцов, которое я увижу, если я выберу количество (*) из таблицы, будет 600*288*2000*15?
Далее я не понимаю часть вставки
partitions: fixed(1) # 1 partition per batch
Означает ли это, что только 1 раздел будет обновлен с помощью 1 операции вставки?
select: fixed(10)/10 # no chance of skipping a row when generating inserts
Что это за отбор? Я не понимаю, как это работает. Сначала моя таблица пуста, как она будет что-то выбирать и вставлять, если в таблице ничего нет? Правильно ли я понимаю, что он выбирает 100% данных из каждой партии для вставки (поскольку он говорит фиксированное (10)/10), а затем вставляет их?
1 ответ
Опубликованный вами YAML содержит 4 раздела:
- схема
keyspace:
иtable:
пройти стресс-тестирование, - в
columnspec:
раздел содержит метаинформацию, которая определяет, как будут генерироваться синтетические данные, - в
insert:
раздел определяет, как будут записываться данные, и - в
queries:
Раздел определяет, как данные будут считываться.
Для ключа раздела:
- The
host
столбец будет содержать фиксированный размер 32 символа с равномерно распределенным населением от 1 до 600 хостов. - The
bucket_time
столбец будет содержать фиксированный размер 18 символов с заполнением, равномерно распределенным от 1 до 288 «сегментов». - Столбец будет содержать от 10 до 100 символов с количеством услуг от 1000 до 2000.
Поскольку возможное количество столбцов равномерно распределено от 1000 до 2000, можно предположить, что среднееservice
равно 1500. Это означает, что общее количество разделов (Tp
) рассчитывается по:
Tp = hosts x buckets x services
= 600 x 288 x 1500
Таблица имеет ключ кластеризации, и поскольку каждый раздел содержит фиксированный размер 15 строк (согласно ), максимальное количество строк в таблице (не столбцов):
max_rows = Tp x time_rows
= (600 x 288 x 1500) x 15
Для раздела "запись" спецификацияpartitions: fixed(1)
означает, что каждая операция записи будет вставлять только1
раздел. Спецификацияselect: fixed(10)/10
означает, что все 10 строк («выбранные» из 15 возможных сгенерированныхtime
ценности вcolumnspec
) будет записан в раздел.
Для получения дополнительной информации о распределении населения и статистических функциях см .
cassandra-stress
документ на веб-сайте Apache Cassandra. Ваше здоровье!