我按照这篇博文中的描述设置了 Elasticsearch Service 和 DynamoDb 流。 现在我需要将预先存在的数据从 DynamoDB 添加到 Elasticsearch。
我看到文章的“索引预先存在的内容”部分,但我不知道如何处理该 Python 代码,在哪里执行它。
在这种情况下添加预先存在的数据的最佳选择是什么?
我按照这篇博文中的描述设置了 Elasticsearch Service 和 DynamoDb 流。 现在我需要将预先存在的数据从 DynamoDB 添加到 Elasticsearch。
我看到文章的“索引预先存在的内容”部分,但我不知道如何处理该 Python 代码,在哪里执行它。
在这种情况下添加预先存在的数据的最佳选择是什么?
将现有项目填充到弹性搜索并不简单,因为 dynamodb 流适用于项目更改而不是现有记录,
这里有一些优点和缺点的方法
从 dynamodb 扫描所有现有项目并发送到 elasticsearch
我们可以扫描所有现有项目并运行托管在 ec2 机器上的 python 代码以将数据发送到 es。
Pros:
一个。简单的解决方案,不需要太多。
Cons:
一个。无法在 lambda 函数上运行,因为如果记录数太多,作业可能会超时。
湾。这种方法更像是一次性的,不能用于增量更改,(假设我们希望随着 dynamodb 数据的变化不断更新 es。)
使用 dynamodb 流
我们可以启用 dynamodb 流并按照此处的说明构建管道。现在我们可以更新现有项目的一些标志,以便所有记录流过管道,数据进入 es。
Pros:
一个。该管道可用于增量 dynamodb 更改。
湾。没有代码重复或一次努力,每次我们需要更新 es 中的一项时,我们都会更新该项目并在 es 中建立索引。
C。没有多余的、未经测试的一次性代码。(软件世界中维护代码的巨大问题。)
Cons:
一个。更改 Prod 数据可能是一件危险的事情,根据用例可能不允许。
这是对上述方法的轻微修改
我们可以创建一个临时表并在临时表上启用流,而不是更改 prod 表中的项目。利用第二种方法中提到的管道。然后将项目从prod表复制到临时表,数据将流经现有管道并在ES中获得索引。
Pros:
一个。不需要更改 Prod 数据,并且此管道也可用于增量更改。
湾。与方法2相同。
Cons:
一个。根据数据大小,将数据从一个表复制到另一个可能需要很多时间。
湾。将数据从一个表复制到另一个是一次性脚本,因此存在可维护性问题。
随时在评论中编辑或建议其他方法。
在这篇文章中描述了如何将预先存在的数据从 DynamoDB 添加到 Elasticsearch。