DynamoDB数据结构/体系结构,以支持一组特定查询



我目前有一个lambda函数将属性数据推送到启用流的DynamoDB中。当添加新项时,流触发另一个Lambda函数,该函数应该对第二个DynamoDB表进行查询,以查看表中是否存在与流中的新对象匹配的"用户查询"。第一个表中被推入流的项如下所示:

{
Item: {
partitionKey: 'myTableId',
bedrooms: 3,
latitude: 52.4,
longitude: -2.6,
price: 200000,
toRent: false,
},
}

第二个表包含活动用户查询。例如,一个用户正在寻找一个房子在他的位置半径30英里,£150,000和£300,000之间。

第二个表中该查询对象的示例如下:

{
Item: {
partitionKey: 'myTableId',
bedrooms: 3,
minPrice: 150000,
maxPrice: 300000,
minLatitude: 52.3,
maxLatitude: 52.5
minLongitude: -2.5,
maxLongitude: -2.7,
toRent: false,
userId: 'userId',
},
}

当一个新属性进入流时,我想触发一个lambda,它对第二个表进行查询。我想写一些类似……的东西。
获取所有用户查询卧室==streamItem。卧室minPrice & lt;streamItem。价格maxPrice祝辞streamItem。价格minLatitude & lt;streamItem。纬度maxLatitude祝辞streamItem.latitude。理想情况下,我想通过查询和过滤器来实现这一点,而不需要扫描。
我很高兴完全重组表以适应上述要求。一直在阅读和阅读,还没有找到一个合适的答案,所以希望专家可以指给我正确的方向!提前谢谢你

这里没有DynamoDB的灵丹妙药。你唯一的工具是PK/SK查找值和范围,过滤器的暴力暴力之后的东西,和gsi提供一个替代的观点。你得有点创意。具体情况取决于你的具体情况。

就像如果你知道你每次都会得到所有这些特定的值,你可以构造一个包含床位##租金#和价格SK的PK。然后,对于这三个属性,您可以对地理属性进行精确的基于索引的分辨率和过滤。

如果您愿意,您可以量化价格范围值(将预先确定的价格范围存储为单个值)并将其放入PK中。比如把价格分成50k块,每个块都有一个前导值的名称。如果有人想要15万到25万,那么你可以使用两个PKs, & 150"one_answers"200";块。

得到PK/SK + GSI +过滤器。就是这样。所以这取决于你发明一个解决方案,使用它们,以提高效率为目标。

最新更新