flask dyanmo查询计数文件

时间:2017-09-09 07:50:16

标签: python-3.x amazon-web-services flask amazon-dynamodb

在dyanmo db中考虑这个模式,我们计算问题

[
    {
        'TableName': "user_detail",
        'KeySchema': [
            {'AttributeName': "timestamp", 'KeyType': "HASH"},
            {'AttributeName': "question", 'KeyType': "RANGE"},
        ],
        'AttributeDefinitions': [
            {'AttributeName': "timestamp", 'AttributeType': "S"},
            {'AttributeName': "question", 'AttributeType': "N"},
        ],
        'ProvisionedThroughput': {
            'ReadCapacityUnits': 40,
            'WriteCapacityUnits': 40]            }
    }
]

我是dyanmo db的初学者,任何人都可以为那个人提供想法。我们需要查询,sql查询就像那样select count(question) from user_detail where question =1

提前致谢

1 个答案:

答案 0 :(得分:1)

我会抛出一些指示。 DynamoDB有两种类型的API: -

选项1: -

1)扫描API - 将扫描整个表格。当哈希键值未知时,应使用scan api

2)查询API - 将使用哈希键查询表。查询API

必须使用哈希键

在您的情况下,哈希键值是未知的。因此,您无法使用Query API。但是,您可以使用扫描API,这在性能和成本方面是非常昂贵的操作。因此,如果您有数百万项的表格,应该避免使用。

另一种方法是创建全局二级索引(GSI),其中question属性作为哈希键,另一些字段作为排序键(可能是timestamp)。这样,您就可以在GSI上使用Query API。但是,这不能完全解决问题。

DynamoDB没有count,min和max等聚合函数。因此,您需要计算客户端结果集中的项目数。

选项2: -

如果您可以选择更改数据模型,可以按照以下说明重新设计上表: -

question - hash key
timestamp - range key

我见过很多使用timestamp作为范围键的用例。请分析您的所有用例的查询访问模式(QAP)并做出相应的决定。