2012-10-17 69 views
1

我要确保我得到这个权利,根据我到目前为止已经阅读
的,你不能查询范围dynamodb主键,
一样,如果你有一个主键是数字像你的客户的电话号码,你不能得到主键大于3010000000或3010000000和3020000000之间的项目
要说清楚,我不是在谈论范围键,我的问题是关于主键本身,查询的范围在dynamodb主键

所以如果这是真的,有很多用例,比如日期之间的项目,用户在某点之后注册,以及...,那些请求者或者表扫描,

这是正确的吗?

编辑:好的,想到的一个解决方案是只使用一个虚拟hash_key作为主键,并将真正的键(如上面的电话号码)作为范围键,这是否工作?

回答

6

是的,您无法使用DynamoDb获得hash_key的范围。但这并不意味着你坚持使用你的用例。

我们来看'日期'用例,并说你正在构建一个日志记录应用程序。你很可能每天都会得到很多记录。

如果您将当天用作hash_key,则可以将完整时间戳记作为range_key。这样,你可以将你的查询拆分成块,并得到你想要的。

当然,要获得最佳结果,您需要很好地了解这类查询。例如,典型的范围是什么?使用DynamoDb以及其他关键值存储,大多数情况下,大多数情况下您的数据都是在查询的基础上进行建模,而不像SQL仅在您仅考虑数据时进行建模。

当然,如果您的物品跨越较大/较短的范围,只需调整此系统即可。

关于“所有在相同的虚拟hash_key”听起来像一个可怕的想法。抱歉。我不是百分百肯定它是如何工作的,但我知道DynamoDB在所谓的分区中做了一些分割。我相信1 hash_key <=> 1 partitions。此外,如果仔细阅读文档,您会注意到预设的吞吐量在各个分区之间均匀分配,因此每个分区仅分配了您支付的部分费用。

+0

好的,我明白你在暗示什么,但是这太麻烦了(考虑到我得到的回报是可以的),但这也意味着我无法查询跨越一天边界的时间范围到下一个,除非我事先知道并创建重叠的键和范围,否则这个人太可怕了,我认为我最好的选择是将所有项目下载到我的应用程序中,并按照我的需要做任何事情,并使用dynamodb作为存储器。 – Ali

+0

我也编辑过这个问题,请你再看一遍,请问 – Ali

+0

更新了我的答案。为了简短起见,我认为这是一个非常不合理的想法,但不能保证。 – yadutaf