amazon-dynamodb - 如果项目在本地 dynamodb 中超过 1350+,则无法正确插入
问题描述
我正在为 dynamodb 使用本地 docker 设置。我可以在项目较少时插入项目,当数据项目超过 1350 左右时,它开始出现错误。
table = dynamodb.create_table(
TableName='logevents',
KeySchema=[
{
'AttributeName': 'Id',
'KeyType': 'HASH' # Partition key
}
],
AttributeDefinitions=[
{
'AttributeName': 'Id',
'AttributeType': 'S'
}
],
ProvisionedThroughput={
'ReadCapacityUnits': 1,
'WriteCapacityUnits': 1
}
)
item = {
"log_datetime": "2019-08-04 16:16:24:302000",
"Action": "ApiCallFailed",
"intuit_tid": "f9d63462-51a6-463b-a19f-b5c6c7867388",
"PackageName": "com.intuit.billingcomm.billing.ius.facade.DefaultIUSServiceFacade.fetchAllGrants",
"FileName": "DefaultIUSServiceFacade.java",
"PID": "9",
"Processed_timestamp": "2019-09-05 18:17:06:515970",
"APIKey": "GetAllGrants",
"thread_id": "x1B35mhttps-jsse-nio-8443-exec-71\\x1B0;39m",
"LastMessage": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX is currently unavailable: status=500",
"Exceptions": [
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.MessageProcessingException",
"com.intuit.billingcomm.billing.exception.IAMTicketClientException",
"com.intuit.platform.integration.hats.common.XXXXXXXXXXXXXXXXX"
],
"Event": "XXXXXXXXXX",
"CategoryLevel1": "XXXXXXXXXXX",
"Domain": "IUS",
"LineNo": "128",
"CategoryLevel2": "TicketServerFailure"
}
for x in range(6000):
item['Id']=str(x)
table.put_item(
Item=item)
scan = table.scan(
ProjectionExpression='#k',
ExpressionAttributeNames={
'#k': 'Id'
}
)
print(str(len(scan['Items'])))
如果我给出范围 600,它会正确显示数据,但如果我给出 6000,它会显示没有项目 1332。有什么限制吗?
解决方案
我相信可能的情况是您得到了分页结果:当扫描项目的大小超过某个阈值时,您只会得到前几个(在您的情况下是前 1332 个)。然后,您需要发出后续调用以scan()
获取下一个块。
在每个调用(第一个除外)中,您需要使用响应ExeclusiveStartKey
中的值进行设置。LastEvaluatedKey
如果LastEvaluatedKey
未设置,您应该停止调用scan()
. 请参阅此答案中的示例代码。
推荐阅读
- node.js - Mongoose 查找,具有一个搜索参数的多个字段
- bioinformatics - 如何从 v. 0.11.6 开始为 fastQC 启用 kmer 图
- xml - 是否可以覆盖 apache-servicemix cxf.xml 文件?
- javascript - handlebar.js 中的条件 IF
- powershell - 如果是第 7 天和第 14 天,Send-MailMessage
- apache-spark - Databricks 中的 Z 排序
- android - 方法 '~/' 在 null 颤动上被调用
- google-search - Google for Jobs 显示的工作位置不正确(Google 正在使用我们的公司总部)
- matrix - 我不知道如何构建我想要的视觉效果
- matlab - 如何识别大文本文件中的一行,从下面的行读取值,并将它们保存到工作区