【发布时间】:2019-06-24 14:51:06
【问题描述】:
我是 DynamoDB 的新手,我正在努力设计一个好的分区键。 我读到一个好的 DynamoDB 使用具有几乎不同值的分区键。 尽管如此,我想知道如果我总是能够使用排序键作为唯一标识符(eq 不是开头),我是否可以使用只有约 10 个(不同)值的 DynamoDB 作为分区键。我会遇到这种方法的问题吗?
我的问题如下所示:
1。 假设我想可视化几所房子的房间。每个房间都有物联网设备,这些设备应该在一种“房间地图”中可见。 可视化已完成并以 json 格式存储在本地。我想将此配置存储在 DynamoDB 中。我的 partition key 将是 houses 而 sort key 将是 roomMap_ 的前缀,后跟房间名称(对于当然)
| partition key | sort key | room map json |
|---------------|---------------------|---------------|
| House1 | roomMap_livingRoom1 | {...} |
| House1 | roomMap_livingRoom2 | {...} |
| House1 | roomMap_kitchen | {...} |
| House2 | roomMap_livingRoom1 | {...} |
2。 现在我还想在 DynamoDB 中存储 IoT 设备的仪表板。 DeviceIds 对于一个 House 来说是唯一的(根据设计),但在其他 House 中可以是相同的。例如。一个设备“fridgeSensor”可能存在于不止 1 个房子里。仪表板配置也存储为 json。
| partition key | dashboard config json |
|----------------------------|-----------------------|
| House1::fridgeSensor | {...} |
| House1::temperatureSensor1 | {...} |
| House2::fridgeSensor | {...} |
当我读到良好的 DynamoDB 设计只使用一个表时,我想到了以下表,通过使用第一个表设计的 PartitionKey 并调整排序键:
| partition key | sort key | room map json | dashboard config json |
|---------------|---------------------|---------------|-----------------------|
| House1 | roomMap_livingRoom1 | {...} | null
| House1 | roomMap_livingRoom2 | {...} | null
| House1 | roomMap_kitchen | {...} | null
| House2 | roomMap_livingRoom1 | {...} | null
| House1 | device_fridgeSensor | null | {...}
| House2 | device_fridgeSensor | null | {...}
现在我会经常读取相同的分区键。 这是一个糟糕的设计吗? 如果是的话,我怎么能做得更好?
【问题讨论】:
-
对于那些对键和索引设计也摸不着头脑的人,看看这篇有很多例子的帖子:aws.amazon.com/blogs/database/…
标签: amazon-web-services amazon-dynamodb