如何将预先存在的数据从 DynamoDB 添加到 Elasticsearch?

How to add pre-existing data from DynamoDB to Elasticsearch?

我按照 this blog post. 中的描述设置了 Elasticsearch 服务和 DynamoDb 流 现在我需要将预先存在的数据从 DynamoDB 添加到 Elasticsearch。

我看到了文章的 "Indexing pre-existing content" 部分,但我不知道如何处理该 Python 代码,在哪里执行它。

在这种情况下添加预先存在的数据的最佳选择是什么?

this post 中描述了如何将预先存在的数据从 DynamoDB 添加到 Elasticsearch。

将现有项目填充到 elasticsearch 并不简单,因为 dynamodb 流适用于项目更改而不是现有记录,

以下是一些有利有弊的方法

  1. 从 dynamodb 扫描所有现有项目并发送到 elasticsearch

    我们可以扫描所有现有项目和 运行 托管在 ec2 机器上的 python 代码以将数据发送到 es。

    Pros:

    一个。简单的解决方案,没有什么要求。

    Cons:

    一个。不能在 lambda 函数上 运行,因为如果记录数太多,作业可能会超时。

    b。这种方法更像是一次性的事情,不能用于增量更改,(假设我们想在 dynamodb 数据更改时不断更新 es。)

  2. 使用 dynamodb 流

    我们可以启用 dynamodb 流并按照说明构建管道 here。 现在我们可以更新现有项目的一些标志,以便所有记录都流经管道并且数据进入 es。

    Pros:

    一个。管道可用于增量 dynamodb 更改。

    b。没有代码重复或一次努力,每次我们需要更新 es 中的一项时,我们更新该项目并在 es 中建立索引。

    c。没有多余的、未经测试的一次性代码。 (软件世界中维护代码的巨大问题。)

    Cons:

    一个。更改产品数据可能是一件危险的事情,根据用例可能不允许。

  3. 这是对上述方法的轻微修改

    我们可以创建临时 table 并在临时 table 上启用流,而不是更改产品 table 中的项目。利用第二种方法中提到的管道。然后将项目从 prod table 复制到 Temporary table,数据将流经现有管道并在 ES 中建立索引。

    Pros:

    一个。不需要更改 Prod 数据,此管道也可用于增量更改。

    b。与方法 2 相同。

    Cons:

    一个。将数据从一个 table 复制到另一个可能需要很多时间,具体取决于数据大小。

    b。将数据从一个 table 复制到另一个是一次性脚本,因此存在可维护性问题。

欢迎在评论中编辑或建议其他方法。