如何在DynamoDB中为时间序列数据设计主键?



我有一个由8个实体类型组成的数据模型,我需要围绕一些访问模式设计一个DynamoDB NoSQL模型。访问模式不是特定于实体的,所以我正在翻译它们,但大多数访问模式依赖于按日期范围获取项目。从之前的相关问题来看,人们通常认为通过itemID(分区键)和日期范围(排序键)获取项目是常态,但在我的情况下,我需要通过日期范围获取所有实体。

这意味着分区键是实体类型,排序键是日期范围。我这样说对吗?

考虑到数据的大小(>100GB),我不确定这是否正确。

更新:访问模式列表和数据示例

到目前为止的访问模式是这样的:

Get all transactions during a given date range
Get all transactions during a given date range for a given locationId
Get all transactions during a given date range for a given departmentId
Get all transactions during a given date range for a given categoryId
Get all transactions during a given date range for a given productId
Get all transactions during a given date range for a given transactionItemId
Get all transactions during a given date range for a given supplierId
Get all product on transactions during a given date range

事务实体具有以下属性(我只包含了一个片段,但总共有52个属性):

identifier  
confirmationNumber **(contains date information)**
priceCurrency   
discount    
discountInvoiced    
price   
shippingAmount  
subtotal    
subtotalInclTax 
.
.
.

我不认为DynamoDB会让你对这个用例感到高兴,你似乎有一堆不同的过滤器类别,这通常不是DynamoDB擅长的。

实现将需要通过全局二级索引进行大量数据复制,以及热分区带来的麻烦。一般的方法可以是使用一个基表,将PK作为日期,将时间戳作为SK。然后根据locationId、departmentId和您所过滤的其他类别创建全局二级索引。这将导致数据重复,并取决于您的过滤器类别热分区。

我可能会使用一个在过滤字段上有索引的关系数据库,并按事务时间对其进行分区。

最新更新