Tag: amazon dynamodb

是否有一个很好的替代Play,我可以将DynamoDB用于AWS上的Web应用程序?

我正在为最终用户设计一个图像存储应用程序,它将具有许多CRUD类型的function。 我想在Amazon Web Services(AWS)上托管应用程序,并打算使用该游戏! 框架,S3和NoSQL数据库。 我找不到Play的DynamoDB适配器! 并且读到MongoDB和EC2不能很好地相处。 Play可以使用DynamoDB吗? 是否有我应该考虑的替代框架(玩!看起来对我很有吸引力,干净,精益和简单)。

带有DynamoDB和MySQL双数据源的Spring Data / JPA存储库

我熟悉如何使Spring通过多个持久性单元和多个entityManagerFactoryBean实现动态处理多个数据源,但我正在努力的是如何在相同的弹簧配置中通过spring实现MySQL方言和 DynamoDB方言 -配置xml文件。 工作模式如下: [来自某个端点的数据POJO] – >将POJO保留到DynamoDB中,检索该对象的UUID(业务键作为POJO上的字段) – >将UUID作为复合键(没有参照完整性,它只是另一列)保留到MySQL中数据库[与其他相关的映射实体]。 我正在努力解决将DynamoDB实例添加到Spring配置文件中以实现此目的的方法。 对于它的价值,相关的存储库将在不同的包中。 任何10人的先发都会感激不尽! 我已经做了一些搜索,但所有的DynamoDB映射器框架似乎都处于更高的水平 – 我错过了什么吗? 我一直在关注Spring-Data DynamoDB,但仍然无法在配置文件和Dynamo之间建立链接。 提前致谢, 一个。 =========思考更新========= 我想我已经走错了路。 从更多地挖掘样本,进行本地集成测试[pure dynamodb],我认为不可能将DynamoDB用作EntityManager Factory实现的一部分:为此,我认为我将不得不“创建”我自己的存储库实现,它为Dynamo调用mapper和AWS连接助手类等,而不是使用任何JPA spring提供的代码。 除非有人能推荐/暗示否则?

在JSON对象的子字段上进行DynamoDB查询

是否可以在dynamoDB表中搜索json对象的子字段? 我的桌子: Item: “item name”, Location: {…}, ItemInformation : { ItemName: “itemName”, ProductLine: { Brand: “Razer”, ManufacturerSource: “Razer” } 最初在这个表中,ItemInformation将是一个键并搜索一个对象,我们将为项目信息构造json,然后使用json字符串作为键进行查询。现在我们需要实现该对象的子字段搜索,这可以每次包含不同的字段,即isDigital:“true”。 我在问题中注意到: DynamoDB高级扫描 – JAVA 答案似乎是否定的,我将不得不将这些字段分开。 但我很好奇PHP库为什么以及如何在dynamoDB中查询JSON对象上的子字段。 那么将列作为单独的字段存储然后在所有字段上添加索引真的没有更好的解决方案吗?

使用ResourceNotFoundException的简单DynamoDB请求失败

我刚刚使用Java SDK(v1.8)启动并运行DynamoDB。 我使用AWS控制台创建了一个非常简单的表。 我的表有一个主哈希键,它是一个String(没有范围)。 我已经将一个项目放入表中,其中包含4个其他属性值(所有字符串)。 我正在为表中的该项创建一个简单的Java请求,但是它因ResourceNotFoundException而失败。 我绝对肯定我提供的表名是正确的,因为我用来查询该项的主哈希键的名称。 表状态在AWS控制台中列为Active ,我也可以看到该项及其值。 这是我得到的错误: Requested resource not found (Service: AmazonDynamoDB; Status Code: 400; Error Code: ResourceNotFoundException; Request ID: …) 我尝试了以下(使用类的dynamodbv2版本): Map key = new HashMap(); key.put(PRIMARY_KEY, new AttributeValue().withS(value)); GetItemRequest request = new GetItemRequest() .withTableName(TABLE_NAME) .withKey(key); GetItemResult result = client.getItem(request); 我也尝试使用所有这些类的较旧的,已弃用的版本,如下所示: GetItemRequest request = new GetItemRequest() .withTableName(TABLE_NAME) .withKey(new Key().withHashKeyElement(new AttributeValue().withS(value))); […]

在JAVA中使用Lambda的AWS DynamoDB触发器

我试图在dynamodb流事件上触发用Java编写的AWS lambda函数。 亚马逊有一个相同的指南,在这里使用NodeJS http://docs.aws.amazon.com/lambda/latest/dg/wt-ddb-create-test-function.html NodeJS的测试输入(来自上面的链接)看起来像一个SNS事件,所以我尝试在Java中使用相应的SNSEvent类作为我的处理程序方法的输入。 import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.LambdaLogger; import com.amazonaws.services.lambda.runtime.events.SNSEvent; import com.amazonaws.services.lambda.runtime.events.SNSEvent.SNSRecord; import java.util.List; public class RecomFunction { public void handler(SNSEvent event, Context context) { LambdaLogger logger = context.getLogger(); List records = event.getRecords(); if (records != null) { for (SNSRecord record : records) { if (record != null) { logger.log(“SNS record: ” + record.getSNS().getMessage()); […]

为枚举构建一个通用的DynamoDBMarshalling

我正在使用Amazon Web Services SDK for Java for DynamoDB; 试图满足@DynamoDBMarshalling的界面: Class<? extends DynamoDBMarshaller> marshallerClass(); 我建立了一个接收任何枚举的编组器: public class EnumMarshaller<T extends Enum> implements DynamoDBMarshaller { @Override public String marshall(T getterReturnResult) { return getterReturnResult.toString(); } @Override public T unmarshall(Class clazz, String obj) { return Enum.valueOf(clazz, obj); } } 问题是当我尝试在我的字段上使用注释时,我无法弄清楚: public static enum MyEnum {BLA, BLA2} @DynamoDBMarshalling(marshallerClass=EnumMarshaller.class) public MyEnum getStatus() […]

如何在AWS DynamoDB文档API上更新地图或列表?

新的AWS DynamoDB文档API允许直接对应于底层JSON表示的2种新数据类型:Map(也称为JSON对象)和List(也称为JSON数组)。 但是,我找不到更新这些数据类型的属性而不完全覆盖它们的方法。 相反,可以通过添加另一个数字来更新Number属性,因此在Java中您可以执行以下操作: new AttributeUpdate(“Some numeric attribute”).addNumeric(17); 同样,您可以将元素添加到Set数据类型的属性中。 (在旧的API中,您可以将AttributeAction.ADD用于这两个目的。) 但对于Map或List,似乎必须在本地更新先前的值,然后将其PUT而不是该值,例如在Java中: List list = item.getList(“Some list attribute”); list.add(“new element”); new AttributeUpdate(“Some list attribute”).put(list); 这种可读性要低得多,在某些情况下效率低得多。 所以我的问题是: 有没有办法更新Map或List数据类型的属性而不覆盖以前的值? 例如,要将元素添加到List中,还是将元素放入Map中? 您将如何使用Java API实现它? 你知道将来支持这个计划吗?

使用Java将DynamoDB JSON转换为标准JSON

我需要将AWS DYNAMODB JSON转换为标准JSON对象。 所以我可以从DynamoDB JSON中删除数据类型更像是: 在DYNAMODB JSON中: “videos”: [ { “file”: { “S”: “file1.mp4” }, “id”: { “S”: “1” }, “canvas”: { “S”: “This is Canvas1” } }, { “file”: { “S”: “main.mp4” }, “id”: { “S”: “0” }, “canvas”: { “S”: “this is a canvas” } } ] to Standard JSON “videos”: [ { […]

DynamoDB JsonMarshaller无法反序列化对象列表

我有一个Java类,它是DynamoDB中表的数据模型。 我想使用DynamoDBMapper来save和load Dynamo中的项目。 该类的一个成员是List 。 所以我使用JsonMarshaller<List>来序列化和反序列化该字段。 该列表可以由JsonMarshaller成功序列化。 但是,当我尝试检索条目并读取列表时,它会抛出exception: java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to MyObject 。 看起来JsonMarshaller将数据反序列化为LinkedHashMap而不是MyObject 。 我该如何摆脱这个问题? MCVE: // Model.java @DynamoDBTable(tableName = “…”) public class Model { private String id; private List objects; public Model(String id, List objects) { this.id = id; this.objects = objects; } @DynamoDBHashKey(attributeName = “id”) public String getId() { […]

DynamoDBMapper用于条件保存

我正在使用DynamoDBMapper,并且当且仅当hashkey和range键组合不存在时,才想有条件地保存。 我知道有一些方法可以使用UUID来减少碰撞的可能性,但我想通过使用条件保存来保护自己。 我遇到了这篇使用DynamoDBSaveExpression的 文章但是我无法指定条件是“hashkey AND rangekey”不能存在。 API指定了withConditionalOperator方法,但我无法在我的课程中看到这个。 我也在这里使用最新的aws java sdk。 有关如何有条件保存的任何建议? 或者我可能做错了什么?