如何在 Amazon DynamoDB 中保存实时和历史车辆位置数据

Posted

技术标签:

【中文标题】如何在 Amazon DynamoDB 中保存实时和历史车辆位置数据【英文标题】:How to save Live and Historical Vehicle Location data in Amazon DynamoDB 【发布时间】:2017-12-05 01:20:21 【问题描述】:

我正在尝试在 DynamoDB 中处理和存储大约 3 万辆汽车的位置信息。

每 10 秒将存储每辆车的实时信息。 会被处理成Live track单车 该信息还将用于获取给定点和半径的附近车辆。 我会用python代码

我遵循以下策略:

Hist table 保存设备历史信息

数据将是:deviceid(分区键)、lat、lon、timestamp(排序键)、geohash

实时表格保存实时信息

数据为:deviceid(分区键)、lat、lon、timestamp、geohash(sortkey)

地理哈希有助于搜索附近的车辆

将更新表格信息,以便仅显示 30k 数据,在给定时间为每辆车提供一个数据。

在每 10 秒完成一次写入的情况下,如何改进 Hist 和 Live 表读取和写入的缩放?

【问题讨论】:

您目前遇到了哪些扩展问题? 【参考方案1】:

您可以在创建时指定 DynamoDB 表的Read and Write throughput,并且可以在以后根据需要修改吞吐量。另外,DynamoDB 允许bursting beyond these defined throughput limits。

要获得表的全部吞吐量,use a wide range of Partition Keys 以便将请求分发到许多不同的服务器。

DynamoDB 现在also supports Auto Scaling,因此它可以根据使用情况自动扩展

为了改进最终一致读取的缩放,您还可以使用In-Memory Acceleration with DAX。

突发写入(写入吞吐量可能不足)的情况下,一些 AWS 用户在收到 Throttling 错误后使用 Amazon SQS 队列临时存储数据,并使用稍后读取的后端进程这些消息并将它们插入到 DynamoDB 中。这允许为表提供 平均 吞吐量,而不是 峰值 吞吐量。

底线:您应该能够通过增加表的吞吐量来避免大多数扩展问题。其他技术(如上文详述的技术)可以提供更大的规模。

【讨论】:

以上是关于如何在 Amazon DynamoDB 中保存实时和历史车辆位置数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Lambda从Amazon AWS中提取和转换单个dynamodb元素

如何在 Node 中使用 Amazon 的 Dynamodb Local?

Amazon DynamoDB 是不是支持查询结果的流式传输

如何使用 java 对 Amazon dynamodb 中的数据进行排序

使用“where”条件从 Amazon DynamoDB 获取项目

如何将Amazon SQS与Dynamodb集成