nosql - Amazon DynamoDB 表设计和查询

标签 nosql amazon-dynamodb

我们正在考虑将 DynamoDB 用于预期的大型数据集。我有很强的 SQL 背景,所以 No-SQL 的思维方式对我来说是全新的。

我有一个问题和设计,但遇到了一个看似死胡同的地方。
文档说要确保你的哈希键被广泛分布以帮助提高性能,好吧,这是有道理的。

我将为用户记录各种数据点/操作。散列键应该是用户 ID,而我的范围键可以是执行的操作,这对我来说很有意义。

现在,如果我想要用户 #1 执行的所有操作,我可以轻松查询。
但是,如果我想要所有执行了操作 X 的用户,我无法在没有表扫描的情况下做到这一点。来自Query documentation :

A Query operation directly accesses items from a table using the table primary key, or from an index using the index key. You must provide a specific hash key value.

所以我似乎仅限于从特定用户获取数据,除非我愿意做 table scan ,速度较慢且消耗许多容量单位。

我认为,我的问题最终是一个设计问题。也许我在 No-SQL 方面遗漏了什么?我的哈希键应该是别的东西吗?或者只是我的要求不适合 No-SQL(更具体地说,DynamoDB)?

哈希键几乎就像是 DynamoDB 的一种分组。我考虑过将散列 key 更改为我们打算实现的操作,但我并没有广泛分发我的 key ......

最佳答案

DynamoDb 满足您允许两种类型查询的要求的方法是将数据存储在两个表中,一个具有散列键 user-id 和范围键 action-id,另一个具有散列键 action-id 和范围键用户 ID。

并且你应该考虑是否需要两个表中的所有数据,或者是否可以将一个表作为汇总表。例如,假设您的可能操作数量有限。不是将每个操作的完整记录放在用户键控表中,您可能希望每个用户只有一行的表:用户的散列键 - id,第二列是多值的并且是列表用户至少执行过一次的任何操作 ID。

关于nosql - Amazon DynamoDB 表设计和查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16203154/

相关文章:

security - 像 Redis 这样的键/值数据存储是否适合授权数据?

mongodb - 在 MongoDB 中使用 LIKE 等效项进行查找

NoSQL 作为日志记录和跟踪的本地存储

php - DynamoDb batchGetItem 和分区键和排序键

amazon-dynamodb - 如何在没有时间点恢复的情况下导出DynamoDB表数据?

amazon-web-services - 如何将 IoT 流数据映射到索引 Dynamo DB 列

node.js - 如何在 DynamoDB 中查询不存在的(空)属性

java - 在具有 100 万条记录的索引上查询 dynamodb

ruby - 存储稀疏矩阵的数据库

hbase - 如何将新的列族添加到现有的HBase表中?