Nosql DynamoDB:通过比较查询非键值

Nosql DynamoDB:通过比较查询非键值,nosql,amazon-dynamodb,Nosql,Amazon Dynamodb,假设我们有许多数据表是以时间戳哈希值对的形式构造的,其中的值可以是例如温度或其他种类的不同测量数据 为了获得某些值的时间戳,我们可以使用valuehash-timestamprange构建一个二级索引,但是如果我们想通过诸如GT、LT、BETWEEN之类的比较操作来查询该值以获得一系列值的时间戳,该怎么办 显然,我想避免使用扫描。我唯一想到的是使用一个伪散列键,并将值+时间戳放入range属性,但我猜这与scan?相比有其自身的问题 是否有更好的解决方案,或者可以使用DynamoDB来实现这一点

假设我们有许多数据表是以时间戳哈希值对的形式构造的,其中的值可以是例如温度或其他种类的不同测量数据

为了获得某些值的时间戳,我们可以使用valuehash-timestamprange构建一个二级索引,但是如果我们想通过诸如GT、LT、BETWEEN之类的比较操作来查询该值以获得一系列值的时间戳,该怎么办

显然,我想避免使用扫描。我唯一想到的是使用一个伪散列键,并将值+时间戳放入range属性,但我猜这与scan?相比有其自身的问题


是否有更好的解决方案,或者可以使用DynamoDB来实现这一点?

您需要知道散列,然后才能对范围执行查询。要解决这个问题,您需要对表进行非规范化,即创建一个键反转的副本。尽管这看起来有点让人头疼,但这是关键价值存储的所有性能优势有时都需要的权衡之一

此案例的示例:
如果两把钥匙都是随机的,那么你就不走运了。您可以尝试使用一个月的时间戳,而不是将您的散列设置为一个伪值,这样您应该始终能够务实地计算出散列应该是什么。然后,您还可以将范围设置为两个值(由连字符分隔)的组合,即时间戳值,然后在非规范化的表中,使用值时间戳,这样您应该能够使用比较运算符,而不会影响性能。

非规范化就是我通过构建二级索引所指的。但是,这不允许我查询值,只能获取。如上所述,我曾想过使用一个公共散列键作为一个“虚拟”,用于所有在范围键中有值+时间戳的查询,但我不确定它的性能或它可能有分区的其他问题,所以我在这里寻找替代方法。非规范化至少目前不是问题。如果它们都是完全随机的,那么我认为你运气不好。建议:不要将散列设置为一个伪值,而是使用一个月时间戳,这样你就应该能够实用地计算出散列应该是什么。然后,您还可以将范围设置为两个由连字符分隔的值,即时间戳值,然后在非规范化表中的值时间戳中,这样您应该能够在没有性能影响的运算符之间使用GT,LT。尽管不太喜欢分割数据,我想这是我必须做出的权衡,以实现这一点。