0

我正在编写一个跟踪大约 30k 的大量设备的软件。(像优步,但位置信息来自不同类型的 GPS 设备)

  1. 我每 5 秒获取一次设备的位置信息
  2. 现在我需要将所有信息保存在数据库中,以便它可以用于跟踪任何设备或查找您附近的设备。

这是我的计划:

  1. 我在 Dynamo db 中有一个名为 Livetrack 的表,它保存了每个设备的最新位置信息
  2. 数据包含deviceid、tiestamp、纬度、经度

我应该如何设计 DynamoDb 表,使其每 5 秒可以处理 30000 次写入/60000 次读取

  • 我的读写能力应该是多少单位。
  • 开发完成后,我将使用 aws cloud DynamoDB
  • 我应该不使用 DynamoTable 并使用 redis 之类的缓存吗?

在本地 dynamodb 安装中,如果我无法每 5 秒写入 6 个设备数据并同时读取设备数据

我的 Livetrack 数据创建为:

from __future__ import print_function # Python 2/3 compatibility
import boto3

dynamodb = boto3.resource('dynamodb', region_name='us-west-2', endpoint_url="http://localhost:8000")


table = dynamodb.create_table(
    TableName='LocationOne',
    KeySchema=[
        {
            'AttributeName': 'deviceid',
            'KeyType': 'HASH'  #Partition key
        }
       
    ],
    AttributeDefinitions=[
        {
            'AttributeName': 'deviceid',
            'AttributeType': 'S'
        }
    ],
    ProvisionedThroughput={
        'ReadCapacityUnits': 10,
        'WriteCapacityUnits': 10
    }
)

4

1 回答 1

0

您可能需要使用本地 Dynamodb 上可能不可用的DynamoDB Autoscaling功能。DynamoDB 自动扩展有助于扩展和防止限制问题。

DynamoDB Auto Scaling 使用 AWS Application Auto Scaling 服务代表您动态调整预置的吞吐量容量,以响应实际流量模式。这使表或全局二级索引能够增加其预置的读取和写入容量,以处理流量的突然增加,而不会受到限制。当工作负载减少时,Application Auto Scaling 会降低吞吐量,因此您无需为未使用的预置容量付费。

最佳实践:-

作为最佳实践,请确保这deviceid不是顺序的。这样数据就会分散在分区中。这有助于确保所有读/写不使用上述用例所需的相同分区。

请参阅此博客以设计最佳分区键

于 2017-06-28T14:22:14.820 回答