database - 你如何查询 DynamoDB?

标签 database nosql amazon-dynamodb

我正在研究 Amazon 的 DynamoDB,因为它看起来消除了维护和扩展数据库服务器的所有麻烦。我目前正在使用 MySQL,维护和扩展数据库是一件非常头疼的事情。

我已经阅读了文档,但我很难理解您将如何构建数据以便轻松检索数据。

我对 NoSQL 和非关系数据库完全陌生。

从 Dynamo 文档看来,您只能使用有限数量的比较运算符查询主哈希键和主范围键上的表。

或者您可以运行全表扫描并对其应用过滤器。问题是它一次只能扫描 1Mb,因此您可能必须重复扫描才能找到 X 个结果。

我意识到这些限制使它们能够提供可预测的性能,但似乎很难将您的数据导出。执行全表扫描似乎确实效率很低,而且随着表的增长,效率只会随着时间的推移而降低。

例如,假设我有一个 Flickr 克隆。我的图像表可能类似于:

  • 图像 ID(数字、主哈希键)
  • 添加日期(数字、主要范围键)
  • 用户 ID(字符串)
  • 标签(字符串集)
  • 等等

因此,使用查询,我将能够列出过去 7 天的所有图像,并很容易地将其限制为 X 个结果。

但是如果我想列出来自特定用户的所有图像,我需要进行全表扫描并按用户名过滤。标签也是如此。

并且因为您一次只能扫描 1Mb,您可能需要进行多次扫描才能找到 X 数量的图像。我也没有看到一种方法可以轻松地停在 X 数量的图像上。如果您尝试抓取 30 张图片,您的第一次扫描可能会找到 5 张,第二次可能会找到 40 张。

我有这个权利吗?这基本上是一种权衡吗?您将获得真正快速且几乎无需维护的可预测数据库性能。但代价是您需要构建更多逻辑来处理结果?

还是我完全偏离了基地?

最佳答案

是的,您对性能和查询灵 active 之间的权衡是正确的。

但是有一些技巧可以减轻痛苦——二级索引/非规范化可能是最重要的。

例如,您将有另一个以用户 ID 为关键字的表,列出他们的所有图像。添加图像时,您会更新此表并向以图像 ID 为键的表添加一行。

您必须决定需要哪些查询,然后围绕它们设计数据模型。

关于database - 你如何查询 DynamoDB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9131191/

相关文章:

c# - 通过 odbc C#.net 连接 db2

Php-Mysql 根据域列从数据库中选择行

java - hibernate 中的一对多映射 : Not able to save objects

database - PostgreSQL - 错误 : invalid privilege type CREATE for sequence

java - Java 全文搜索解决方案?

ruby-on-rails - 使用 Redis 作为主要的 Rails 存储

reactjs - React 中的 AWS Amplify,如何从订阅的监听器呈现新数据

amazon-web-services - AWS DynamoDB 表设计 : Store two UserIDs and Details in Table

amazon-web-services - 将空字符串与 AWS Amplify API 和 DynamoDB 结合使用

amazon-web-services - putdynamodb 如何在 nifi 中工作?