Как работает файл 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. Ваше здоровье!

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