Python Boto DynamoDB:仅从记录中检索指定的属性

时间:2014-01-04 17:04:17

标签: python attributes amazon-dynamodb boto

我正在尝试调整高容量网站的性能。我正在使用boto.dynamodb2库。如果给定它的主哈希键(没有范围),我如何只从记录中检索指定的属性?

作为次要问题,这是否会影响我们如何向亚马逊收费?亚马逊根据每个记录或每千字节读取的数据收费(以较大的单位为准)。如果对于给定的记录,我有3个属性,总共只有100个字节,而第4个属性总共为63KB,我只请求前3个(较小的)属性。我是否收取1个单位的费用,或者我仍被收取64个单位?

2 个答案:

答案 0 :(得分:3)

boto's documentation for get_item您可以传递attributes_to_get list:

  

attributes_to_get(list) - 属性名称列表。如果提供,   只返回指定的属性名称。否则,全部   属性将被返回。

遗憾的是,你不能通过跳过属性来“保存”读取。来自DynamoDB's documentation

  

对于任何返回项目的操作,您可以请求其子集   要检索的属性;但是,这样做对项目没有影响   尺寸计算。

另请注意,项目大小限制为64KB(因此您不能拥有300KB的属性)

答案 1 :(得分:1)

您可以查看Local Secondary Index on DynamoDB。对于本地二级索引,您可以指定与主键相同的哈希键,以及要检索的特定属性列表,您只需为这些属性付费。索引的大小将计入DynamoDB存储分配,这不是那么昂贵,恕我直言。

  

选择要投影到本地辅助节点的属性时   index,您必须考虑预配置吞吐量之间的权衡   成本和存储成本:

     
      
  • 如果您需要尽可能少地访问几个属性   延迟,考虑只将那些属性投射到本地   二级指数。指数越小,成本就越低   存储它,你的写入成本就越少。如果有   您偶尔需要获取的属性,成本   预定的吞吐量可能会超过长期成本   存储这些属性。

  •   
  • 如果您的应用程序经常访问某些非关键属性,   您应该考虑将这些属性投射到本地辅助中   指数。本地二级索引的额外存储成本将是   抵消了频繁进行表扫描的成本。

  •   
  • 如果您需要频繁访问大多数非关键属性   基础上,您可以投影这些属性 - 甚至是整个源   table-到本地二级索引。这会给你最大的   灵活性和最低配置吞吐量消耗,因为没有   提取将是必需的;但是,您的存储成本会增加,   如果要预测所有属性,甚至可以加倍。

  •   
  • 如果您的应用程序需要不经常查询表,但必须   考虑,对表中的数据执行许多写入或更新   投影KEYS_ONLY。本地二级指数将是最小的   大小,但在查询活动需要时仍然可用。

  •   

来自An Introduction to boto’s DynamoDB v2 interface

您还可以针对本地二级索引运行查询。只需提供索引名称(index ='FirstNameIndex')&根据其字段过滤参数:

# Users within the last hour.
>>> recent = users.query(
...     account_type__eq='standard_user',
...     date_joined__gte=time.time() - (60 * 60),
...     index='DateJoinedIndex'
... )

>>> for user in recent:
...     print user['first_name']
'Alice'
'Jane'