Dynamodb:使用两个以上属性进行查询

发布于 2021-01-29 16:27:02

在Dynamodb中,您需要在索引中指定可用于进行查询的属性。

如何使用两个以上的属性进行查询?

使用boto的示例。

Table.create('users', 
        schema=[
            HashKey('id') # defaults to STRING data_type
        ], throughput={
            'read': 5,
            'write': 15,
        }, global_indexes=[
            GlobalAllIndex('FirstnameTimeIndex', parts=[
                HashKey('first_name'),
                RangeKey('creation_date', data_type=NUMBER),
            ],
            throughput={
                'read': 1,
                'write': 1,
            }),
            GlobalAllIndex('LastnameTimeIndex', parts=[
                HashKey('last_name'),
                RangeKey('creation_date', data_type=NUMBER),
            ],
            throughput={
                'read': 1,
                'write': 1,
            })
        ],
        connection=conn)

我如何寻找姓氏为“ John”,姓氏为“ Doe”,并使用boto在“ 3-21-2015”上创建的用户?

关注者
0
被浏览
43
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您的数据建模过程必须考虑您的数据检索要求,在DynamoDB中,您只能通过哈希或哈希+范围键查询。

    如果通过主键查询不足以满足您的要求,则可以通过创建辅助索引(本地或全局)来确定备用键。

    但是,在某些情况下,可以将多个属性的串联用作主键,以避免维护二级索引的成本。

    如果需要按名字,姓氏和创建日期来获取用户,建议您将这些属性包括在哈希和范围键中,因此不需要创建其他索引。

    哈希键应包含可以由您的应用程序计算的值,并同时提供统一的数据访问。例如,假设您选择定义密钥,如下所示:

    哈希键(名称):first_name#last_name

    范围键(创建):MM-DD-YYYY-HH-mm-SS-毫秒

    如果提到的属性不足以使您的键在整个表中唯一,您可以随时附加其他属性。

    users = Table.create('users', schema=[
            HashKey('name'),
            RangeKey('created'),
         ], throughput={
            'read': 5,
            'write': 15,
         })
    

    将用户添加到表中:

    with users.batch_write() as batch:
         batch.put_item(data={
             'name': 'John#Doe',
             'first_name': 'John',
             'last_name': 'Doe',
             'created': '03-21-2015-03-03-02-3243',
         })
    

    查找在‘03 -21-2015’创建的用户John Doe的代码应类似于:

    name_john_doe = users.query_2(
       name__eq='John#Doe',
       created__beginswith='03-21-2015'
    )
    
    for user in name_john_doe:
         print user['first_name']
    

    重要注意事项:

    一世。如果您的查询开始变得过于复杂,并且哈希表或范围键由于包含过多的串联字段而变得太长,则一定要使用二级索引。这是一个很好的信号,即仅主索引不足以满足您的需求。

    ii。我提到哈希键应提供 统一的数据访问


    Dynamo使用一致的散列来在其副本之间划分其密钥空间,并确保均匀的负载分布。假设密钥的访问分布不高度偏斜,则均匀的密钥分布可以帮助我们实现均匀的负载分布。”
    [DYN]

    哈希键不仅可以唯一标识记录,而且还可以确保负载分配。范围键(使用时)有助于指示大多数将一起检索的记录,因此,存储也可以针对此类需求进行优化。

    以下链接提供了有关该主题的完整说明:

    http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForTables.html#GuidelinesForTables.UniformWorkload



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看