为DynamoDB Android SDK实现CreatedAt和UpdatedAt时间戳

时间:2016-02-15 00:31:46

标签: android amazon-web-services parse-platform timestamp amazon-dynamodb

需要有关DynamoDB的帮助。

我正在从Parse.com切换回来(因为他们正在退休解析)到AWS移动中心。

我想捕获并保存将一行或一项数据写入我的dynamodb表的日期和时间。在解析中它会自动完成,但在dynamodb中则不然。

我已经在互联网上寻找线索,但目前没有可靠的解释或例子。

有人可以指出我正确的方向,或者请在此处显示示例代码,了解如何将CreatedAt和UpdatedAt实现到dynamodb中。

我是否获得系统时间并将其保存到dynamodb或获取服务器时间?

如果我需要获取AWS服务器时间的服务器时间戳,我该如何实现它?

非常感谢。

3 个答案:

答案 0 :(得分:1)

AWS可以使用AWS Lambda with Amazon DynamoDB

这使您可以基于DynamoDB事件触发服务器端代码。它比Parse更复杂,但可以避免使用应用程序端日期/时间/代码来维护CreatedAt和UpdatedAt值。

这样的日期时间值必须是Ints或Strings,因为Datetime不是JSON类型,而DynamoDB不会超出基本的JSON字段类型。

答案 1 :(得分:0)

由于多种原因,这很棘手。首先,如果您需要严格的事件顺序,那么使用时间会导致一堆错误,您可能希望研究更高级的分布式系统算法,如https://en.wikipedia.org/wiki/Lamport_timestampshttps://en.wikipedia.org/wiki/Vector_clock

如果只是非常接近'对于您的用例来说很好,那么您需要记住的主要事情是移动设备系统时间通常是不正确的。用户可以更改时钟,在时区之间移动等等......您可以做一些事情。

A)您可以拥有自己的服务器来保持ping的中心时间 B)当您拨打电话时,Dynamo还会返回日期标题,但是它会在响应中返回。但是,您至少可以使用它来查看设备上的日期是否准确。如果您在请求签名中的日期与Dynamo期望的时间不匹配时Dynamo返回错误,那么SDK会显示https://github.com/aws/aws-sdk-android/blob/78cdf680115a891a6e1355c56068e2f56e3c5056/aws-android-sdk-core/src/main/java/com/amazonaws/http/AmazonHttpClient.java类似的内容。这可能不是最佳解决方案,但至少应该为您提供可能途径的想法。

答案 2 :(得分:0)

我决定在用户​​点击我的应用上的发布/保存按钮时捕获System.currentTimeMillis(),并将Epoch时间(以毫秒为单位)保存到我的DB CreatedAT属性中。 我读了here:"要认识到的最重要的事情之一就是2个人同时调用System.currentTimeMillis()应该得到相同的结果,无论他们在哪个星球上#34;所以我打算生成一个随机的UUID主键(哈希键),然后将用户的CreatedAT时间保存为排序键。

我对任何其他实际选择持开放态度。我将在平均时间内使用它进行测试并观察行为。