Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用复合密钥复制主键,DynamoDB_Java_Amazon Web Services_Amazon S3_Nosql_Amazon Dynamodb - Fatal编程技术网

Java 使用复合密钥复制主键,DynamoDB

Java 使用复合密钥复制主键,DynamoDB,java,amazon-web-services,amazon-s3,nosql,amazon-dynamodb,Java,Amazon Web Services,Amazon S3,Nosql,Amazon Dynamodb,快速提问,我是NoSQL数据库的新手,请原谅我对该主题缺乏了解,但我想知道,如何在DynamoDB中使用主键和复合键的组合。以下面的例子为例。我可以使用相同的主键但使用不同的组合键来查询数据库吗?。我想按数据排序,这样我就可以按日期或地区查询它,我还想保留一个包含账单id和名称的映射。谢谢你的帮助 回答您的评论问题时,您无法通过范围键快速查询。 您只能查询哈希键以获取日期列表。 也许您应该切换它并进行日期散列,但这样您就不能查询范围了 在建模DynamoDB时,您需要确保了解限制并相应地建模 编

快速提问,我是NoSQL数据库的新手,请原谅我对该主题缺乏了解,但我想知道,如何在DynamoDB中使用主键和复合键的组合。以下面的例子为例。我可以使用相同的主键但使用不同的组合键来查询数据库吗?。我想按数据排序,这样我就可以按日期或地区查询它,我还想保留一个包含账单id和名称的映射。谢谢你的帮助


回答您的评论问题时,您无法通过范围键快速查询。 您只能查询哈希键以获取日期列表。 也许您应该切换它并进行日期散列,但这样您就不能查询范围了

在建模DynamoDB时,您需要确保了解限制并相应地建模

编辑以回答评论 您可以有一个哈希为clientId、范围为billId的表。
这将帮助您查询客户的所有账单。如果您想在数据库中按类型过滤它们,可以在“type”属性上添加一个,并快速过滤(请记住,我们仍在讨论二次查询。第一个查询是clientId)


还要记住,一次只能使用一个索引(范围键被视为索引)

我认为您混淆了主键和散列键。进一步阅读:我确实混淆了它们,但我认为我更感兴趣的是散列和范围类型的主键。例如,我使用对象的id作为散列键,使用对象的日期作为对象的范围类型来保存对象。想象一下这个场景,如何检索数据库中与某个日期匹配的所有对象?。如何在NoSql数据库中执行此类操作。很抱歉,我找到了一些回答我问题的文档。感谢您的帮助如果我定期按范围查询,我会错过像dynamo这样的数据库的性能优势吗?。我想首先在UI上向用户显示账单名称列表,在用户选择他们想要使用的账单之后,我将从DynamoDB检索特定的账单。如果我想按类型过滤它们,我是否必须创建更多具有不同哈希键和范围组合的条目?例如hashKey:id=1233 range:type;paidno,如果数据均匀分布在散列键上,则可以保证优势。我将编辑我的答案,为另一个问题添加一个模式,再添加一个问题。我假设当你创建一个表时,你必须给它分配一个hashkey和一个range,你不能在同一个表上混合不同范围的hashkey。e、 g hash=clientId和range=billId或hash=clientId和range=paid?。我想这就是建立二级索引的原因。这取决于你。如果范围键是S(字符串)-可以在其上保存多个内容。例如XXX#billId和YYY#paid。如果pair对象和billId对象永远不会有相同的字符串,那么它们也可以在没有XXX/YYY的情况下混合使用。但是,我认为这是一种不好的模式,会导致更坏的结果。多个表呢?AWS认为这是一种最佳做法。我开始怀疑NoSQL数据库是否适合,我之所以使用它是因为它的可扩展性很好,这就是主要原因。