DynamoDB Range-Key bit-wise搜索

0

【以下的问题经过翻译处理】 我有一个问题,我有一个建筑物,建筑物可以位于多个项目中。我需要查询所有属于特定项目的建筑物。

我试图做类似这样的事情,但包含不能用于搜索标志。

PK => company#BUILDINGS SK => buildingId#INFO LSI => flags

我知道:

  • 可以通过在范围键中添加项目来重复建筑记录来实现。
  • 每个项目的本地二级索引无法解决此问题,因为项目数量大于5。
  • 全局二级索引可以解决此问题(但每个项目都有许多全局二级索引将增加每个建筑更新的写入成本(成本不是重要问题,但仍有20的限制,目前需要更多,但我不想拥有那种类型的硬限制,而是更喜欢复制记录)。

从用户查询的角度来看,这可以很容易地解决:

  • 数字范围键和按位查询项目。
  • 字符串范围键和包含而不是仅有的begins_with。
  • 具有模式的字符串范围键 * Range Value =“01100”,并搜索begins_with“??1”。

我是dynamoDB的新手,正在将mongoDB项目迁移到它。所以我可能会错过一些东西。

是否有易于解决此查询问题但我不知道的方法?

预先感谢

profile picture
专家
已提问 8 个月前37 查看次数
1 回答
0

【以下的回答经过翻译处理】 要理解DynamoDB,首先需要了解它的底层数据结构类似于B+树。与MongoDB不同的是,DynamoDB不允许您创建效率低下的访问模式。您的所有请求都必须定位到存储在一起的物理项目,这就是为什么在排序键上使用“contains”不是有效函数的原因。您必须使用“begins_with”或“between”等函数,因为可以保证这些项目彼此靠近。这确保了DynamoDB保持了其关键信条之一:“任意规模的可预测性能”。

查询属于特定“项目”的所有“建筑物”就像创建一个具有“项目”作为分区键的GSI一样简单。

“SELECT building FROM mytable.myindex WHERE project ='123'”

这将返回该项目的建筑物列表。

profile picture
专家
已回答 8 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则