【发布时间】:2020-02-10 14:03:17
【问题描述】:
我必须为客户设计数据库,以了解他们在未来 24 个月内通过多个供应商获得的数百万种材料的价格。因此,该数据库将在未来 24 个月内每天存储特定供应商提供的每种材料的价格。所以我们保留过去的数据。现在查找将发生在:
- 查找供应商截至客户特定日期的材料价格。
- 查找供应商在客户一段时间内的材料价格。
我可以认为主键为:
- 分区键:(客户 ID、物料 ID、供应商 ID、日期) -- 这是否会导致性能问题,因为从长远来看它会产生如此多的分区?
- Partition Key: (customer Id, material Id, supplier Id, monthbucket), clustering key: date --monthbucket 将按月在同一分区上存储材料的数据,并将 2020 年 2 月日期的值类似于“202002”。
另一个问题是如何确保我的数据在节点之间均匀分布。
注意:
- 客户、材料、供应商和日期的组合是独一无二的。
- 两个客户可以有相似的材料 ID。
关键点: 1. 一些客户可能拥有非常小的数据集,而另一些客户可能拥有庞大的数据。由于日期是所有客户的常量字段,我们可以在多大程度上均匀地跨分区分配数据。此外,不同客户之间的材料 ID 可以相同,因为存在内部表示(可能是数字或字母数字)
- 每个客户和材料 ID 的供应商数量从 1 到 20 不等。 您有什么建议或问题吗?
谢谢。
【问题讨论】:
标签: design-patterns cassandra database-partitioning