【问题标题】:Clarification questions about Boto Dynamo aws关于 Boto Dynamodb aws 的澄清问题
【发布时间】:2014-07-10 07:24:30
【问题描述】:

我读到这个:http://boto.readthedocs.org/en/latest/ref/dynamodb2.html

但我还有几个问题。

在:

results = users.scan(
...     age__in=[25, 26, 27, 28, 29],
...     limit=1
... )

寻求确认的问题: 1)用户是一个发电机表。 2) 年龄在存储时类似于 data["age"]。所以是这样的:

def createSwfInDynamo(key,images,text):
    data={}
    data["time"]=five
    data["age"]=25
    newI = swfTable.new_item(id,data["time"], data)
    newI.save()

可以使用 users.scan 进行扫描。

3) 另外 __ 不是对象名称,而是分隔比较运算符。因此,age__in 意味着年龄列必须在 [25, 26, 27, 28, 29] 中。

4) Limit=1 表示用户只希望返回 1 个匹配项?

5) 最后我知道 dynamo 只返回前 1mb 或 1000 个对象。如果我想获得扫描的所有匹配项,我怎样才能很好地迭代呢?

【问题讨论】:

    标签: python amazon-web-services amazon-dynamodb boto


    【解决方案1】:

    1) 2) 是的

    3) 我不知道

    4) 和 5)

    假设您的表中有 100 个项目并且您想要扫描该表。您可以将限制设置为 25 并调用扫描 4 次。或者您可以将限制设置为 1 并调用扫描 API 100 次。在扫描响应中会有一个LastEvaluatedKey,您应该将其保存并作为ExclusiveStartKey 传递给您的下一个扫描调用。

    例如,如果您将限制设置为 25,那么您的扫描结果将包含 LastEvaluatedKey,这是 DynamoDB 服务查找第 26 个项目的提示。

    基于我从here借来的代码的示例

    def search(table, scan_filter=None, range_key=None,
               attributes_to_get=None,
               limit=None):
    
        start_key = None
    
        while True:
            results = self.conn.layer1.scan(table_name=table,
                                      attributes_to_get=attributes_to_get,
                                      exclusive_start_key=start_key,
                                      limit=request_limit)
            # do stuff with your results
    
            start_key = results['LastEvaluatedKey']
            if start_key is None:
                break
    

    我建议您现在使用 dynamoDB 的低级 Python API,因为它更类似于 Java API,您可以在线获取有关基本 API 的更多信息。一旦您感觉更舒服了,您就可以迁移到更高级别的 API,这会提高您的工作效率。

    【讨论】:

    • 你有 lastEvaluatedKey 的例子吗? ty
    • 非常感谢。任何机会您都知道为什么示例 boto.readthedocs.org/en/latest/ref/dynamodb2.html 让我们说 age__in 有效,但是 adser__eq="iTunes...." 失败,scan() 当表有一个列广告商时得到了一个意外的关键字参数 'advertiser__eq',并且列的值为“iTunes....”
    • 还有哪里/什么是较低级别的python api
    • 您发送的链接中的低级 api。它在左侧导航栏boto.readthedocs.org/en/latest/ref/dynamodb2.html
    【解决方案2】:
    1. users 是表

    2. “这是正确的年龄”是变量名

      我找到了这个here

      检查源代码后,它似乎将参数拆分为__

    3. 因此,是的,在这种情况下,结尾是参数/ 运算符。

    4. 是的

    5. @Erben Mo 给出的解决方案

    【讨论】:

      猜你喜欢
      • 2020-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-22
      • 2012-08-05
      • 2014-07-14
      相关资源
      最近更新 更多