如何在AWS DynamoDB中连接表?

时间:2016-04-20 19:53:01

标签: amazon-web-services amazon amazon-dynamodb

我知道整个设计应该基于自然聚合(文档),但是我想要为本地化(lang,key,text)实现一个单独的表,然后在其他表中使用键。但是,我无法找到任何关于这样做的例子。

任何指针都可能有帮助!

6 个答案:

答案 0 :(得分:28)

您是对的,DynamoDB不是设计为关系数据库,也不支持连接操作。您可以将DynamoDB视为一组键值对。

您可以跨多个表(例如document_ID)使用相同的密钥,但DynamoDB不会自动同步它们或具有任何外键功能。一个表中的document_ID虽然名称相同,但在技术上与另一个表中的不同。由应用程序软件决定是否同步这些密钥。

DynamoDB是一种考虑数据库的不同方式,您可能需要考虑使用托管关系数据库,例如Amazon Aurora:https://aws.amazon.com/rds/aurora/

需要注意的一点是,Amazon EMR确实允许加入DynamoDB表,但我不确定这是您要查找的内容:http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/EMRforDynamoDB.html

答案 1 :(得分:10)

使用DynamoDB而不是加入,我认为最好的解决方案是将数据存储为打算在以后读取的形状。

如果发现自己需要复杂的读取查询,则可能陷入了期望DynamoDB像RDBMS那样的陷阱,事实并非如此。转换和整理您写入的数据,使读取保持简单。

这些天磁盘比计算便宜得多-不要害怕非正规化。

答案 2 :(得分:2)

您必须查询第一个表,然后使用下一个表的get请求遍历每个项目。

其他答案并不令人满意,因为1)不回答问题,更重要的是2)您如何在知道表的未来应用之前设计表?技术债务太高,无法合理地涵盖无限的未来可能性。

我的回答非常低效,但这是当前提出的问题的唯一解决方案。

我热切期待一个更好的答案。

答案 3 :(得分:0)

我知道我的答复已经迟了几年了。但是,我能够挖掘出一些有关Amazon DynamoDB&Joins的其他信息,这可能会使您(或也许另一个人,将来可能会在研究此信息时迷失于此讨论)而受益。

确切地说,我能够在Amazon DynamoDB网站上找到一些文档,该文档指出可以利用Apache HiveQL查询语言在Amazon DynamoDB表,列和数据等上执行联接。

在DynamoDB(带有HiveQL)中查询数据: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/EMRforDynamoDB.Querying.html

与Amazon DynamoDB和Apache Hive一起工作: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/EMRforDynamoDB.Tutorial.html

在Amazon EMR上使用Apache Hive处理Amazon DynamoDB数据: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/EMRforDynamoDB.html

我希望这些信息可以帮助某人,即使不是原始海报。

答案 4 :(得分:0)

最近,我对使用avg和sum和dynamoDb之类的连接和聚合函数有相同的要求,为解决此问题,我使用了Cdata JDBC驱动程序,并且运行良好。它支持联接以及聚合功能。虽然,由于Cdata的许可成本,我也在寻找避免使用cdata的解决方案。

答案 5 :(得分:0)

我在该领域多次提出的解决方案是将DynamoDB同步到一个更适合您要查找的操作类型的单独数据库中。

我写了一个blog主题书,比较了我看到人们解决这个问题的各种方法,但是在这里我将总结一些关键要点,因此您不必阅读所有

DynamoDB二级索引

有什么好处?

  1. 快速而无需其他系统!
  2. 对于您正在构建的非常具体的分析功能(例如排行榜)很有用

注意事项

  1. 有限的二级索引,有限的查询保真度
  2. 如果您依赖扫描,价格昂贵
  3. 直接使用生产数据库进行分析的安全和性能问题

DynamoDB + Glue + S3 + Athena

Architecture

有什么好处?

  1. 所有组件都是“无服务器的”,不需要配置基础架构
  2. 轻松实现ETL管道自动化

注意事项

  1. 端到端的数据延迟长达数小时,这意味着陈旧的数据
  2. 查询延迟在数十秒到几分钟之间变化
  3. 架构实施可能会丢失混合类型的信息
  4. 如果源中的数据结构发生变化,ETL流程可能会不时需要维护

DynamoDB + Hive / Spark

Architecture

有什么好处?

  1. 查询DynamoDB中的最新数据
  2. 除了指定架构之外,不需要ETL /预处理

注意事项

  1. 当字段具有混合类型时,架构实施可能会丢失信息
  2. EMR集群需要一些管理和基础架构管理
  3. 查询最新数据涉及扫描并且费用昂贵
  4. 直接在Hive / Spark上查询延迟在几十秒到几分钟之间变化
  5. 在可操作的数据库上运行分析查询的安全性和性能影响

DynamoDB + AWS Lambda + Elasticsearch

有什么好处?

  1. 全文搜索支持
  2. 支持多种类型的分析查询
  3. 可以处理DynamoDB中的最新数据

注意事项

  1. 需要管理和监视基础结构以进行摄取,建立索引,复制和分片
  2. 需要单独的系统以确保DynamoDB和Elasticsearch之间的数据完整性和一致性
  3. 扩展是手动的,需要预配置其他基础架构和操作
  4. 不支持不同索引之间的联接

DynamoDB + Rockset

Architecture

有什么好处?

  1. 完全无服务器。不需要基础架构或数据库的操作或配置
  2. DynamoDB与Rockset集合之间的实时同步,因此它们之间的间隔永远不会超过几秒钟
  3. 进行监视以确保DynamoDB和Rockset之间的一致性
  4. 基于数据的自动索引可实现低延迟查询
  5. 可以扩展到高QPS的SQL查询服务
  6. 加入其他来源的数据,例如Amazon Kinesis,Apache Kafka,Amazon S3等。
  7. 通过REST和使用客户端库与Tableau,Redash,Superset和SQL API之类的工具集成。
  8. 功能包括全文搜索,提取转换,保留,加密和细粒度的访问控制

注意事项

  1. 不太适合存储很少查询的数据(例如机器日志)
  2. 不是事务性数据存储区

(完全公开:我在Rockset的产品团队工作) 请查看blog,以获取有关每种方法的更多详细信息。