将JSON存储为DynamoDB与列表/映射类型中的字符串

eni*_*has 10 amazon-dynamodb

我正在使用DynamoDB进行存储.我需要将Java对象存储在表中的一个属性中.我看到两种方法.一个在客户端使用Jackson将对象转换为JSON,然后将JSON字符串存储在属性中.另一种方法是使用DynamoDB List/Map类型来存储我的对象.每个的优缺点是什么(在项目大小方面,Dynamo数据库查询的灵活性)?

Iva*_*tyk 10

第一种方法

这里的好处是您可以存储任意数据,而不应该关心DynamoDB是否支持它.您甚至不需要关心这是否是有效的JSON.如果要存储DynamoDB列表/映射,则所有属性都应为DynamoDB支持的类型.

您可以进一步推动这种方法并使用压缩,您的项目将占用更少的空间,并在此过程中为您节省一些RCU/WCU.

第一个缺点是使用这样的代码更难.仅仅因为您需要来回转换数据会使您的代码和操作更加复杂.

第二个缺点是,DynamoDB对您的数据一无所知,也无法访问它.例如,您将无法使用文档路径功能.

第二种方法

我认为这是一种首选方法,除非你有充分的理由坚持第一种方法(例如不寻常的数据或大小限制).

这里的好处是它更容易使用,您可以访问所有DynamoDB功能,如果您使用DynamoDBMapper,它实现起来非常容易.

  • 第二种方法提供了更大的查询灵活性。首先,您可以指定将使用地图/列表中的字段的查询表达式。其次,您将能够从 DynamoDB 数据结构中投影属性:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ProjectionExpressions.html (2认同)