【问题标题】:Consecutive records having same timestamp - AWS Lambda, DynamoDB具有相同时间戳的连续记录 - AWS Lambda、DynamoDB
【发布时间】:2021-11-12 01:14:56
【问题描述】:

我有一个将记录插入 DynamoDB 的 Node.js Lambda 函数。插入时,我使用new Date().getTime() 方法在名为createdAt 的字段下使用时间戳标记记录,如下所示:

const timestamp = new Date().getTime().toString();

然后在 lambda 内部:

const data = {
    ...JSON.parse(event.body),
    purchased: false,
    _id: uuid.v4(),
    createdAt: timestamp,
    updatedAt: timestamp,
};

在检索数据时,我正在执行扫描操作,然后使用 JS 数组排序方法手动对返回的记录数组进行排序,以将结果按createdAt 的降序排列(即最新记录应该出现在顶部):

    //sort data in descending order of createdAt
    data = data.sort((a, b) => {
        let aDate = Number(a.createdAt);
        let bDate = Number(b.createdAt);

        return bDate - aDate;
    });

现在,当我在 localhost 中进行测试时,这可以正常工作,但在 AWS Lambda 上执行代码时,我注意到一个奇怪的问题 - 彼此相隔几秒创建的多个记录具有相同的时间戳! 这个影响记录的排序并返回一个未排序的随机排序列表。谁能告诉我为什么会这样?

【问题讨论】:

  • 只是为了确定 - 您在 lambda 函数内部而不是外部创建 timestamp 值?
  • 外面。哦,我明白了!

标签: node.js aws-lambda amazon-dynamodb serverless


【解决方案1】:

问题是我在 lambda 函数之外创建了 timestamp。这意味着 timestamp 变量被重用,因为函数的实例被保留以服务后续请求(与建议在 lambda 之外创建数据库连接的原因相同)。这就是为什么在相隔几秒钟创建的多个记录上观察到相同的时间戳的原因。

感谢AugustAlfarhan 指出!

解决方案 - 在 lambda 函数中创建时间戳

exports.handler = async (event) => {
    const timestamp = new Date().getTime().toString();
    const data = {
        ...JSON.parse(event.body),
        purchased: false,
        _id: uuid.v4(),
        createdAt: timestamp,
        updatedAt: timestamp,
    };
// rest of the code goes here.....

};

【讨论】:

  • 应该添加这个作为答案而不是评论,很高兴你把它整理好了!
猜你喜欢
  • 2019-01-28
  • 2019-12-08
  • 2021-10-30
  • 2017-08-03
  • 1970-01-01
  • 2013-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多