我是 AWS DynamoDB 的新手,需要这里专家的指导。
我正在创建一个应用程序,该应用程序将显示一个事件列表,条件是事件日期必须大于今天日期,并按事件日期降序排列。我的表架构如下:
分区键 = eventid
排序键 = 事件日期
如果我使用关系数据库,我可以使用“SELECT * FROM events where eventdate > todaydate ORDERBY eventdate DESC”,但是我想如何使用 AWS DynamoDB 实现这一点?我希望使用 QUERY 而不是 SCAN。
我使用UPDATE_SKIP_NULL_ATTRIBUTESas 配置创建映射器,以便我可以保存实体并跳过空属性。它确实有效。但是,当我调用batchSave时,它不起作用。
有谁知道问题所在吗?
```
DynamoDBMapperConfig update_config = DynamoDBMapperConfig.builder()
.withSaveBehavior(DynamoDBMapperConfig.SaveBehavior.UPDATE_SKIP_NULL_ATTRIBUTES)
.build();
mapper = new DynamoDBMapper(client, update_config);
List<DynamoDBMapper.FailedBatch> failedBatches = mapper.batchSave(one, two);
```
Run Code Online (Sandbox Code Playgroud)
最后,我发现空属性已更新到我不想更新的数据库。我只想保存不为空值的属性。
我有一个用例,需要使用dynamo db查询表达式以编程方式查询dynamo db。假设A和B有两个属性,我想要一个类似的过滤器表达式(A='Test' OR A ='Test1') and B='test2'。
我搜索与此相关,但找不到有用的资源。我是dynamo db的新手。
我使用了Lamdba并设置了IAM和Cognito并获得了identityId和token.我对下一步感到困惑.登录后,用户在Cognito中进行身份验证.但是,如何通过在应用加载时刷新令牌来保持登录状态?如何仅使用经过身份验证的用户查询DynamoDB?文件含糊不清.还使用了用lambda编写的联合身份和我自己的OpenID开发人员身份验证过程.
objective-c amazon-web-services ios amazon-dynamodb aws-cognito
我想使用 Java 访问 Ec2 实例上的 Dynamodb。此 Ec2 实例已被授予 IAM 角色,我可以通过该角色使用 aws CLI:aws dynamodb list-table 直接访问 Dynamodb。现在我尝试通过 Java 访问 Dynamodb。Java 代码应该能够承担角色,但它不起作用。
public static void main(String[] args) throws Exception {
String ROLE_ARN = "arn:aws:iam::....";
AWSSecurityTokenServiceClient stsClient = new AWSSecurityTokenServiceClient();
AssumeRoleRequest assumeRequest = new AssumeRoleRequest()
.withRoleArn(ROLE_ARN)
.withDurationSeconds(3600)
.withRoleSessionName("demo");
AssumeRoleResult assumeResult = stsClient.assumeRole(assumeRequest);
BasicSessionCredentials temporaryCredentials = new BasicSessionCredentials(
assumeResult.getCredentials().getAccessKeyId(),
assumeResult.getCredentials().getSecretAccessKey(),
assumeResult.getCredentials().getSessionToken());
AmazonDynamoDBClient client = new AmazonDynamoDBClient(temporaryCredentials)
DynamoDB dynamoDB = new DynamoDB(client);
TableCollection<ListTablesResult> tables = dynamoDB.listTables();
Iterator<Table> iterator_t = tables.iterator();
System.out.println("Listing table names");
while (iterator_t.hasNext()) …Run Code Online (Sandbox Code Playgroud) 有没有办法使用Boto3(Python库)进行ACID事务?
我想将一个项目写入多个表,并确保写入已应用于所有表,否则回滚.我阅读了Boto3文档,没有看到任何关于事务或ACID操作的提及.
我查看了这个库:http: //dynamodb-mapper.readthedocs.io/en/latest/
我已经检查了代码,它似乎使用旧的boto库,它似乎不再受支持.
我知道有一个针对交易的AWS解决方案:https: //aws.amazon.com/blogs/aws/dynamodb-transaction-library/
这是使用Java代码完成的.我想知道你是否有人能够使用Boto3在DynamoDB上执行交易?
谢谢
我正在尝试对 DynamoDB 查询(在 Node.JS 环境中)运行过滤器表达式,以使其中一个属性不在这些属性列表中。我这样做:
documentClient.query( {
TableName: 'event',
IndexName: 'OrganisationTimestamp',
KeyConditionExpression: '#ts BETWEEN :from AND :to',
ExpressionAttributeNames: {
'#ts': 'Timestamp'
},
ExpressionAttributeValues: {
':to': to,
':from': from,
':ignoredUserIds': "1, 2, 3"
},
FilterExpression: 'not (userId in (:ignoredUserIds))'
})
Run Code Online (Sandbox Code Playgroud)
但是,我在这里没有任何运气,并且在该范围内使用 userId 属性取回项目。
非常感谢任何帮助,谢谢!
我们正在试验一种新的无服务器解决方案,其中外部提供程序写入 DynamoDB,DynamoDB Stream 对新的写入事件做出反应,并触发 AWS Lambda 函数来传播更改?
到目前为止,它运行良好,但是,有时我们会注意到数据被延迟,例如 Lambda 几分钟内没有更新。
在查阅了大量 DynamoDB Stream 文档后,他们使用的唯一术语是“近实时流记录”,但通常什么是“近实时”?我们在这里看到的可能的延迟是什么?
real-time amazon-web-services amazon-dynamodb aws-lambda amazon-dynamodb-streams
我正在寻找使用 python 的 boto3 模块向 dynamodb 批量写入项目,我得到了这个。这是我第一次使用 aws cli 或 boto3。文档说当存在空值和可能不正确的数据类型时会发生验证异常错误,但我已经玩过所有这些并且它似乎不起作用。
dynamodb 是否只喜欢一次写入 25 个项目?如果是这样,我如何控制这些批次?
我的请求:
client = boto3.client('dynamodb')
response = client.batch_write_item(RequestItems=batch_dict)
Run Code Online (Sandbox Code Playgroud)
batch_dict 的顶部:
{'scraper_exact_urls': [{'PutRequest': {'Item': {'Sku': {'S': 'T104P3'},
'pps_id': {'N': '427285976'},
'scraper_class_name': {'S': 'scraper_class_name'},
'store_id': {'N': '1197386754'},
'updated_by': {'S': 'user'},
'updated_on': {'N': '1480714223'},
'updated_url': {'S': 'http://www.blah.com'}}}},
{'PutRequest': {'Item': {'Sku': {'S': 'T104P3'},
'pps_id': {'N': '427285976'},
'scraper_class_name': {'S': 'scraper_class_name'},
'store_id': {'N': '1197386754'},
'updated_by': {'S': 'user'},
'updated_on': {'N': '1480714223'},
'updated_url': {'S': 'http://www.blah.com'}}}},....
Run Code Online (Sandbox Code Playgroud)
架构:
属性:“pps_id”=>\Aws\DynamoDb\Enum\Type::NUMBER、“sku”=>\Aws\DynamoDb\Enum\Type::STRING、“scraper_class_name”=>\Aws\DynamoDb\Enum\Type: :STRING, "store_id"=>\Aws\DynamoDb\Enum\Type::NUMBER, "updated_url"=>\Aws\DynamoDb\Enum\Type::STRING, "updated_by"=>\Aws\DynamoDb\Enum\Type ::STRING, "updated_on"=>\Aws\DynamoDb\Enum\Type::NUMBER, 字段: …
在我的 Python 脚本中,我将一条记录(项目)插入 DynamoDB 表中,但我意识到来自 AWS 的响应不包括插入的实际项目:
{'ResponseMetadata': {'HTTPHeaders': {'connection': 'keep-alive',
'content-length': '2',
'content-type': 'application/x-amz-json-1.0',
'date': 'Fri, 27 Jan 2017 23:31:22 GMT',
'server': 'Server',
'x-amz-crc32': '234324243',
'x-amzn-requestid': 'xxxxxxxxxx'},
'HTTPStatusCode': 200,
'RequestId': 'xxxxxxxxxx',
'RetryAttempts': 0}}
Run Code Online (Sandbox Code Playgroud)
这很不幸,因为我的逻辑如下:
if not user.exists():
user = create_user()
else:
user = get_user()
user.do_something()
Run Code Online (Sandbox Code Playgroud)
我不想再做一次往返只是为了获取我刚刚插入的用户对象。
当然,我可以模拟该对象,因为boto3在 Python 中使用该user对象只是一个类似字典的东西,但能够仅使用单个表示形式是很好的。似乎也有put_item电话
r = user_table.put_item(Item={'user_id': uid, 'info' : { ... }})
Run Code Online (Sandbox Code Playgroud)
应该能够返回放置的项目?或者其他一些端点可以吗?
感谢您的任何见解!
amazon-dynamodb ×10
python ×3
aws-lambda ×2
java ×2
amazon-iam ×1
aws-cli ×1
aws-cognito ×1
boto3 ×1
ios ×1
node.js ×1
objective-c ×1
real-time ×1
role ×1