我知道整个设计应该基于自然聚合(文档),但是我想要为本地化(lang,key,text)实现一个单独的表,然后在其他表中使用键。但是,我无法找到任何关于这样做的例子。
任何指针都可能有帮助!
答案 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主题书,比较了我看到人们解决这个问题的各种方法,但是在这里我将总结一些关键要点,因此您不必阅读所有
(完全公开:我在Rockset的产品团队工作) 请查看blog,以获取有关每种方法的更多详细信息。