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
EXPERTE
gefragt vor 8 Monaten40 Aufrufe
1 Antwort
0

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

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

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

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

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

Relevanter Inhalt