【问题标题】:Storing JSON as string in DynamoDB vs List/Map types将 JSON 作为字符串存储在 DynamoDB 与列表/地图类型中
【发布时间】:2021-04-30 14:35:20
【问题描述】:

我正在使用 DynamoDB 进行存储。我需要将 Java 对象存储在表中的一个属性中。我看到了两种方法:

  1. 在客户端使用 Jackson 将对象转换为 JSON,然后将 JSON 字符串存储在属性中。
  2. 另一种方法是使用 DynamoDB 列表/地图类型来存储我的对象。

每种方法的优缺点是什么(在项目大小、Dynamo DB 查询的灵活性方面)?

【问题讨论】:

    标签: java amazon-dynamodb


    【解决方案1】:

    第一种方法

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

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

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

    第二个缺点是,DynamoDB 对您的数据一无所知,也无法访问它。例如,您将无法使用document paths 功能。

    第二种方法

    我认为这是一种首选方法,除非您有充分的理由坚持使用第一种方法(例如异常数据或大小限制)。

    这里的好处是它更易于使用,您可以访问所有 DynamoDB 功能,如果您使用的是DynamoDBMapper,则为really easy to implement

    【讨论】:

    • 谢谢。还有哪一个允许更多的查询灵活性?就像不是检索整个属性,而是只检索一个键或只检索列表中的 n 个元素。
    • 第二种方法提供了更多的查询灵活性。首先,您可以指定将使用地图/列表中的字段的查询表达式。其次,您将能够从 DynamoDB 数据结构中投影属性:docs.aws.amazon.com/amazondynamodb/latest/developerguide/…
    • 我认为 DynamoDB 不支持仅获取键或从列表中返回 N 个元素。但无论如何,第二种方法会给你更多的灵活性。
    • 好的。 JSON 方法是否提供类似的功能?
    • 没有。对于 DynamoDB,它将只是一个字符串或二进制 blob,它不会理解它的结构。
    猜你喜欢
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 2017-03-28
    • 2020-07-11
    相关资源
    最近更新 更多