我'通过构建一个非常简单的API项目学习AWS API网关+ LAMBDA + Dynamodb。
我每天从价值出发2013-01-01,并保持每天更新,所以基本上是一样的东西:
[
{
"value": 1776.09,
"date": "2013-01-01"
},
{
"value": 1779.25,
"date": "2013-01-02"
},
// ...
{
"value": 2697.32,
"date": "2018-11-22"
}
]
在API我想要得到的数据特定日期和范围(dateFrom - dateTo)方法,而我一直在阅读有关Dynamodb和规划有date
在格式YYYY-MM-DD
分区键和无排序键,但不知道如果这是这种类型的数据和范围查询,我会做,因为我认为我将不得不做的范围查询全表扫描正确的形式给出,虽然是一个小的数据集。
有人能指出我,如果这种做法是对还是做我需要重新考虑我的表结构。
你提出什么工作。
但是,如果你想提高设计的效率,你可以使用YYYY
的分区键,那么你的排序键可以MM-DD
。这样,您可以使用查询操作限制结果(或者你可以仍然使用扫描)。
你甚至可以使用一个单一的,恒定值的分区键和date
作为排序键,但具有一般不建议用于每个项目相同的分区键。
无论哪种方式,你的数据是足够小,你或许应该只挑这是最简单的开发和维护的实施。
复制从this post我的答案
NOSQLdb的几个概念
自带的明显的事情在脑海中寻找特定问题和dynamodb模式是
有键logs
作为主键和timestamp
作为次要密钥。而要做到聚合使用
select * where pk=logs and sk is_between x and y
但这将违反这两个概念。我们一直写在单人PK,总是从同读。
现在这个特定的问题,我们的PK应该是足够随机的(所以没有hot keys)和足够的确定性(这样我们就可以查询)
我们将不得不作出一些假设有关应用程序而设计的键。假设我们决定,我们将每小时更新一次。因此可以有7-JAN-2018-17作为密钥。其中,17指17小时。这主要是确定的,但它不是足够随机。并在1月7日每一次更新或读大多会去同一个分区。为了使键随机我们可以使用散列算法中如MD5计算散列它。比方说,服用后哈希,我们的关键变成1sdc23sjdnsd。如果你正在寻找在表中的数据,这将没有任何意义。但是,如果你想知道的7-JAN-2018-17事件计数你只是凑的时间和从与hashkey dynamodb做一个GET。如果你想知道的所有7-JAN-2018,你可以做重复24获取并汇总计数的事件。
现在这种模式将有问题的地方
经验法则是,当查询模式被明确定义,使用NOSQL和存储性能方面的原因的结果。如果你正在尝试做的查询上的NoSQL的加入或聚集的排序,这是力基础上的技术选择适合您的使用情况。
您还可以查看存储的时间序列数据的aws recommendation。