2016-09-12 8 views
1

Я новичок в Cassandra, я только что узнал об этом с помощью курсов Datastax, но я не нахожу достаточно информации о ковше здесь или в Интернете, и в своем приложении мне нужно использовать ведра для разделения мои данные.Разделение ковша Cassandra для определения размеров разделов

У меня есть инструменты, которые будут принимать меры, довольно много, и ежедневное разделение мер (временная метка как ключ раздела) может быть немного рискованным, так как мы можем легко достичь предела в 100 МБ для раздела. Каждая мера относится к конкретному объекту, идентифицированному с идентификатором. Поэтому я хотел бы использовать ведро, но я не знаю, как это сделать.

Я использую Cassandra 3.7

Вот как моя таблица будет выглядеть, грубо:

CREATE TABLE measures (
    instrument_id bigint, 
    day timestamp, 
    bucket int, 
    measure_timestamp timestamp, 
    measure_id uuid, 
    measure_info float, 
    object_id bigint, 
    PRIMARY KEY ((instrument_id, day, bucket), measure_timestamp, measure_id) 
); 

Я думал о добавлении object_id в качестве ключа секционирования, но затем я потерять «поток мер, «сделанных инструментом», поскольку меня интересует все меры, предпринимаемые инструментом в определенный день или период времени.

  • Итак, вопрос в том, когда я хочу запросить все записи дня для конкретного инструмента, как я могу это сделать, если есть много ведер?
  • Если я хочу, чтобы предел раздела составлял 400 000 строк, как я могу узнать, когда вставлять данные, в которые ведро я должен вставлять данные?
  • Есть ли способ узнать количество ведер?

Большое спасибо за помощь!

ответ

1

Вы должны сосредоточиться на своих требованиях, а затем вернуться к своей схеме. В вашем случае, сколько мер в день каждый инструмент может сделать? Если каждый может сделать меньше ваших 400k-мер, тогда вы уже закончите без bucketing. Если ваши приборы могут выполнять до 10M измерений каждый, то N = 10M/400k Ведра должны быть достаточными для удовлетворения ваших требований. Предполагая N ведра, когда вам нужно запросить все меры, исходящие от определенного инструмента, вы должны выполнить Запросы N, по одному для каждого ведра, если вы не можете подсчитать меры во время записи, чтобы вы могли менять ведро, когда ведро заполнено. Я имею в виду, что вы пишете первые 400 тыс. Мер в ведре 0, затем записываете второй 400 тыс. Мер в ведро 1 и т. Д. Затем вам нужно отслеживать, сколько K вы вставляете данные и выполняете только K запросы вместо этого на N. Таким образом, у вас есть неуравновешенные ведра (и разделы), но вы получаете свои результаты в наименьшем числе запросов. Если вы предпочитаете подход с балансированным ведром, вы можете выполнить каждую запись в равномерно распределенном случайном числе ведра, но затем вы должны выполнить все свои запросы N, чтобы получить все данные определенного инструмента.

+0

Благодарим вас за ответ. Дело в том, что я не знаю, сколько мер может сделать инструмент. Я имею в виду, что при обнаружении объектов количество объектов не имеет предела. Но нормально я могу сделать, как вы говорите :) Итак, нет «встроенного» способа «подсчитать» количество записанных ведер? И как это работает при вставке данных? – Miwauke

+0

@Miwauke Разве вы не знаете * скорость ваших инструментов? Если один инструмент имеет * пропускную способность * одной меры в секунду, то за один день будет максимум ** M = 86400 ** в день за каждый инструмент. Если * пропускная способность * составляет 1 кб в секунду, то у вас есть ** M = 86M ** меры в день на инструмент. Вам не нужно * точное * число, (шаровая) догадка должна быть прекрасной.** Вы ** решаете, в каком ведре вы пишете свои данные: каждый инструмент должен учитывать свои собственные меры и должен писать соответственно правильному ведру с правильным подсчетом количества на ковш *. – xmas79

+0

Я еще не знаю скорость инструментов, но могу исследовать. Спасибо за ваш ответ, поэтому я должен отслеживать «все», чтобы писать в правильном ведре, это то, что я хотел знать. Каков наилучший способ подсчета количества записей в одном ведре? Должен ли я использовать столбец-столбец где-нибудь? – Miwauke