DynamoDB:层级数据加条件 - 表设计

0

【以下的问题经过翻译处理】 大家好,

我正在设计我的DynamoDB表以支持一个相当简单的访问模式,但遇到了问题。我希望你们能帮我一下:)

我有4种不同的产品类型(A,B,C和D),它们都有一个价格和一个位置(国家#州#城市)。

访问模式如下:

(1) 按产品类型过滤

(2) 按产品类型和位置过滤

(3) 按产品类型,位置和价格过滤

问题是,位于USA#NY#NY的产品也必须在USA#NY和USA中可用。

为了能够按位置和价格过滤,我想出了这个解决方案,但会有许多数据重复,我相信必须有更好的解决方案:

PK |     SK & GSI PK     | GSI SK | Other product details (duplicated data)
-----------------------------------------------------------------------------------
ID | TYPE                | PRICE | Image, name, etc
ID | TYPE#USA            | PRICE | Image, name, etc
ID | TYPE#USA#NY         | PRICE | Image, name, etc
ID | TYPE#USA#NY#NY      | PRICE | Image, name, etc

这解决了每个访问模式:

(1) GSI PK = TYPE

(2) GSI PK = TYPE#USA

GSI PK = TYPE#USA#NY

GSI PK = TYPE#USA#NY#NY

(3) GSI PK = TYPE#USA & GSI SK > 150

GSI PK = TYPE#USA#NY & GSI SK > 150

读取效率高,但数据重复(价格和产品细节)并且更新一项需要多个写入。

有没有可能在不重复所有产品细节的情况下实现这一点?

编辑:我不想在价格上使用筛选表达式,因为它是最常见的筛选模式,我希望使它高效且廉价。

profile picture
EXPERTE
gefragt vor 8 Monaten39 Aufrufe
1 Antwort
0

【以下的回答经过翻译处理】 我会向你展示两个备选方案(如下)。在深入了解它们之前,有几个要点需要注意。

首先,从你的schema来看,每个项目大约有5个属性,所以我预计你的项目平均大小在40-50B之间?在这个假设下,我们知道1RCU可以读取4K的数据(或者如果你可以接受最终一致性,那么可以读取8K)。以1RCU每4K为基础,你可以使用1 RCU读取100个项目。如果平均每个查询都会返回100个项目,那么你可以采用当前的schema并且过滤你不需要的项目。

其次,不要通过在应用程序代码中实现该逻辑来重复项目,你可以利用GSIs。见下面的选项#2。

因此,请查看以下内容。你的业务用例和数据形状将决定哪个选项最适合你。

==Alternate option#1== Table-PK | Table-SK | GSI-PK | GSI-SK | Price abc | xyz | TYPE | USA#NY#NY#PRICE | $x

(1) Filter by product type GSI-PK = TYPE

(2) Filter by product type and location GSI-PK = TYPE, GSI-SK starts with USA GSI-PK = TYPE, GSI-SK starts with USA#NY GSI-PK = TYPE, GSI-SK starts with USA#NY#NY

(3) Filter by product type, location and price GSI-PK = TYPE, GSI-SK starts with USA, filter (price) GSI-PK = TYPE, GSI-SK starts with USA#NY, filter (price) GSI-PK = TYPE, GSI-SK > USA#NY#NY#PRICE

==Alternate option#2== Table-PK | Table-SK | GSI-PK | GSI1-SK | GSI2-SK | GSI3-SK abc | xyz | TYPE | USA#PRICE | USA#NY#PRICE | USA#NY#NY#PRICE

(1) Filter by product type GSI-PK = TYPE

(2) Filter by product type and location GSI-PK = TYPE, GSI3-SK starts with USA GSI-PK = TYPE, GSI3-SK starts with USA#NY GSI-PK = TYPE, GSI3-SK starts with USA#NY#NY

(3) Filter by product type, location and price GSI-PK = TYPE, GSI1-SK > USA#PRICE GSI-PK = TYPE, GSI2-SK > USA#NY#PRICE GSI-PK = TYPE, GSI3-SK > USA#NY#NY#PRICE

profile picture
EXPERTE
beantwortet vor 8 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen