Предложение, необходимое для разработки разделения в Кассандре - PullRequest
0 голосов
/ 10 февраля 2020

Мне нужно спроектировать базу данных для клиентов, имеющих цены на миллионы материалов, которые они приобретают у нескольких поставщиков в течение следующих 24 месяцев. Таким образом, база данных будет хранить цены ежедневно для каждого материала, поставляемого указанным поставщиком c в течение следующих 24 месяцев. Поэтому мы сохраняем прошлые данные. Теперь поиск будет выполняться по:

  1. Найти цену на материал поставщиком на указанную клиентом дату c.
  2. Найти цену на материал по поставщик на определенный период времени клиентом.

Я могу представить первичный ключ как:

  1. Ключ раздела: (идентификатор клиента, идентификатор материала, идентификатор поставщика, дата ) - не приведет ли это к проблемам перфорации, так как это приведет к созданию большого количества разделов в долгосрочной перспективе?
  2. Ключ раздела: (идентификатор клиента, идентификатор материала, идентификатор поставщика, monthbucket), ключ кластеризации: date - monthbucket будет хранить данные для материала ежемесячно в том же разделе и будет иметь значение, например «202002» для дат февраля 2020 г.

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

Примечание:

  1. комбинация клиента, материала, поставщика и даты уникальна.
  2. два клиента могут иметь одинаковые идентификаторы материалов.

Ключевые моменты: 1. Некоторые клиенты могут иметь AV очень маленький набор данных, в то время как другие могут иметь огромные данные. Насколько хорошо мы можем равномерно распределять данные по разделам, так как Дата является постоянным полем для всех клиентов. Кроме того, идентификаторы материалов могут быть одинаковыми для разных клиентов, поскольку существует внутреннее представление (возможно, цифра c или alphanumeri c)

Количество поставщиков на одного клиента и номер материала варьируется от 1 до 20 в количестве. У вас есть предложения или вопросы?

Спасибо.

1 Ответ

1 голос
/ 10 февраля 2020

Это зависит от того, сколько поставщиков у вас на одного клиента. Поскольку у вас всегда есть вопросы по идентификатору клиента и идентификатору материала, я рекомендую, чтобы по крайней мере эти столбцы превращались в ключ раздела. Если у вас слишком много поставщиков, вы также можете переместить его в ключ раздела. И я бы не стал иметь ежемесячное ведро - это усложнит запрос.

Так что вы можете go со следующими первичными ключами:

  1. ((customer, material, supplier), date)
  2. ((customer, material) supplier, date)

оба позволят иметь оба запроса:

  1. select * from table where customer = ... and material = ... and supplier = ... and date = ...
  2. select * from table where customer = ... and material = ... and supplier = ... and date >= start and date <= end

, но Я бы порекомендовал go с первым, чтобы разделы были не слишком большими и не слишком маленькими.

...