我相信我了解写入/读取容量单位、它们的工作原理以及在 DynamoDB 中的计算方式。证明就是我明白this https://linuxacademy.com/howtoguides/posts/show/topic/20310-how-to-calculate-read-and-write-capacity-for-dynamodb文章彻底以及AWS 文档 https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ProvisionedThroughput.html#ProvisionedThroughput.CapacityUnits.Write。这就是说,当我将项目写入表中时,我遇到了意外的行为。
我有一个具有以下设置的 DynamoDB 表。最值得注意的是 5 个写入/读取容量单位
我将连接到 Raspberry Pi 的传感器的读数放入此表中,我用它来获取和发送python2.7
到迪纳摩我的剧本 https://gist.github.com/alejo4373/c5a11a8241337688f46bbf883c72fd79.
这些项目肯定小于 1KB。它们看起来像这样:
{
"reading_id": "<current_time>",
"sensor_id": "<SENSORS_IDS[i]>",
"humidity": "<humidity>",
"temperature": "<temperature>"
}
我的剧本 https://gist.github.com/alejo4373/c5a11a8241337688f46bbf883c72fd79迭代传感器,从其中读取数据并将传感器的读数/项目提交到 DynamoDBtable.put_item
每 5 秒一次。也就是说,如果从传感器读取成功,否则任意等待30s。
现在根据我的计算,我每 5 秒写入 DynamoDB 1KB 项目,这应该没问题,因为我的表设置为 5WCU = (5items*1KB)/Second 写入吞吐量。
所以我的问题是:
1。为什么这个小负载(如果我相信正在发生的话)会超过我的 5 WCU,如此处所示?:
2。我已经使用此设置运行了大约一年,没有进行任何更改(免费套餐于 2018 年 9 月 30 日结束)。这是怎么回事,几个月前甚至在免费套餐结束之前它就开始发生变化,如下所示?:
到目前为止我唯一的怀疑是time.sleep() https://docs.python.org/2.7/library/time.html#time.sleep因为在文档中,它说:
睡眠时间(秒)
将当前线程的执行暂停给定的秒数。该参数可以是浮点数以指示更精确的睡眠时间。实际的挂起时间可能小于请求的时间,因为任何捕获的信号都将在执行该信号的捕获例程后终止 sleep()。此外,由于系统中其他活动的调度,暂停时间可能比请求的时间长任意量。
我对 python 不太熟悉,这让我认为它可能是我的代码中的东西。但这并不能解释我今年早些时候没有遇到这个问题的事实。
Anyone您知道上述问题的答案吗?或者我应该在哪里进一步调查这个问题?
Note:我在这里搜索了谷歌和其他相关问题。似乎没有一个适用于我的情况。
谢谢。