gpt4 book ai didi

amazon-dynamodb - 在 DynamoDB 中处理 Java8 日期和时间的最佳方法

转载 作者:行者123 更新时间:2023-12-02 01:06:41 25 4
gpt4 key购买 nike

我调查了使用 Java SDK 存储日期和时间的 DynamoDB 选项。据我所知,Java8 LocalDate 和 LocalDateTime 需要自定义转换器,而对于旧的 Date、Calendar 和 Joda 时间 LocalDateTime 有一些注释。

根据文档,@DynamoDBTypeConvertedTimestamp 支持标准日期类型转换,例如 java.util.Calendar、Long。 @DynamoDBTypeConvertedEpochDate 可用于将日期、日历和 org.joda.time.DateTime 转换为数值。

同时,如果我没有在 Date 字段上放置任何注释,它会被保存,就像它上面有 @DynamoDBTypeConvertedTimestamp 一样,甚至范围查询也可以成功。

是否有人知道解释不同的可能方法,并对从 DynamoDB 存储和检索 Java 日期和时间对象的最佳方法发表意见?

最佳答案

TLDR;这取决于如何使用日期、时间等。

长答案

这将取决于您的用例,因此没有硬性和快速的“最佳”方法。但是,有一些注意事项需要牢记。

表模式中使用的值如何?

如果要将 Java 8 日期/时间用作排序键,请考虑使用自定义转换器将其转换为字符串。如果你这样做,那么你可以使用 begins_with 查询的关键条件表达式中的运算符,如 begins_with(myDate, "2018-12") .如果您想在特定的年、月、日、小时等中搜索所有内容,能够像这样查询将使您的代码更简单。

如果您将该值用作 DynamoDB TTL属性,则必须将其转换为数字时间戳。这是使用 TTL 功能的要求。

java.time 中的哪一个我们在说什么类(class)?

Some of the classes in the java.time package没有转换为数字的自然。例如,LocalDate充其量转换为数字会很笨拙。本地日期 2018-12-10转换为 20181210 最有意义,但在这一点上,您必须编写足够的代码,您不妨只使用内置的LocalDate.toString()LocalDate.parse() .

您需要多久查看一次数据库以跟踪错误或修复错误数据?

如果您经常在数据库中弄乱(希望不是这种情况),请使用人类可读的东西。没有人想知道 2018-12-05T17:23:19.483+08:301544572463 之前或之后当他们在半夜被寻呼时。

您的应用程序对延迟增加的敏感程度如何?

我没有观察到与将日期存储为字符串与数字相关的 DynamoDB 的任何可测量的性能差异。但是,string parsing is slower that using a number创建 java.time对象,因此如果您将日期存储为字符串,可能会对您的应用程序产生轻微影响。

不要让自定义转换器吓跑您

java.time 编写它们真的很容易api。以下是为 LocalDateTime 实现转换器的方法。转换为 String .

public class LocalDateTimeToStringTypeConverter implements DynamoDBTypeConverter<String, LocalDateTime> {

@Override
public String convert(LocalDateTime localDateTime) {
return localDateTime.toString();
}

@Override
public LocalDateTime unconvert(String s) {
return LocalDateTime.parse(s);
}
}

关于amazon-dynamodb - 在 DynamoDB 中处理 Java8 日期和时间的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47218487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com