【问题标题】:Dynamodb - query if a list containsDynamodb - 查询列表是否包含
【发布时间】:2017-04-17 05:46:41
【问题描述】:

我对 NoSQL 还很陌生。使用 Python/Boto,但这是一个相当普遍的问题。目前正在尝试将项目从 MongoDB 切换到 DynamoDB 并寻求有关 DynamoDB 的一些建议,它能够查询列表是否包含某个字符串。我一直在搜索过去一天左右,但我开始担心它没有这个设施,除了使用扫描非常慢,考虑到数据库将在更新时查询数千次。类似未答复的question here

我知道主键只能是 N、S 或 B,而不是像字符串集 (SS) 这样有用的东西。

数据相当简单,看起来像这样。我正在寻找基于标签属性查询数据库的最有效方法,以查找包含“string1”或“string2”的条目。同样,我不想使用扫描,但如果 dynamodb 有最佳实践,我愿意考虑数据结构的规范化。

{
   id: <some number used as a primary key>,
   tags: ['string1', 'string2'...],
   data: {some JSON object}
}

根据我的阅读,即使使用全局二级索引,这似乎也不可能,这很奇怪,因为这会使 dynamodb 仅对最简单的查询有用。希望我错过了什么。

【问题讨论】:

  • 你是说你只有标签数据来查询数据,你也没有分区键?
  • id 键将是分区键,并且只是某种自动增量。我相信 Dynamodb 只允许两个主键,一个哈希和范围(这是可选的)。我可以包含一个辅助字符串键,但除非它可以是一个列表或其中包含可变数量的标签,否则它对查询没有用处。对于上下文,JSON 对象是社交媒体更新的集合,标签是与之相关的关键字。

标签: python amazon-web-services amazon-dynamodb boto3 nosql


【解决方案1】:

在 MongoDB 中,您有多键索引,但在 DynamoDB 中没有。

我认为您需要像在关系数据库中一样解决它:创建一个多对多关系表,其中标签作为哈希键,条目 ID 作为排序键。并找到一些方法使您的关系表与您的条目表保持同步。

【讨论】:

  • 我明白了,这稍微违背了使用 NoSQL 数据库的目的。可悲的是,我决定切换回 Mongo。不能在文档项上存储索引是一个太大的限制。
猜你喜欢
  • 2023-03-11
  • 2019-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 2021-10-30
相关资源
最近更新 更多