amazon-web-services - 如何使用此架构在 Elastic Search 中复制索引?

标签 amazon-web-services go elasticsearch aws-lambda amazon-sqs

我有一个场景,我必须从多个来源导入数据(数百万条记录)并将其保存在数据库中。当用户尝试搜索与该数据相关的任何信息时,他们应该会在 2-3 秒内获得结果。

为此,我设计了一个架构,在该架构中,我使用 golang 从多个来源导入数据并在 AWS SQS 中推送数据。我创建了一个 lambda 函数,它在 AWS SQS 有一些数据时触发。然后,此 lambda 函数将数据推送到 AWS Elastic Search 中。我创建了一个 Rest API,我使用它向用户提供结果。

我每天早上都使用 CRON 来完成导入工作。现在我的问题是,如果有一批新数据出现,我想删除现有数据并用新数据替换所有数据。 我坚持如何实现删除和添加新数据部分。

我想到了创建一个临时索引,然后用原来的索引替换它。但问题是我不知道什么时候导入结束可以做这个索引切换。

最佳答案

您所追求的概念是 index alias .基本工作流程是:

  1. 使用 my-index-2019-09-16 将今天的数据导入索引(例如)。
  2. 确保导入已完成且工作正常。
  3. 将别名指向新索引(这是索引之间的原子切换):

    POST /_aliases
    {
        "actions" : [
            { "remove" : { "index" : "my-index-2019-09-15", "alias" : "my-index" } },
            { "add" : { "index" : "my-index-2019-09-16", "alias" : "my-index" } }
        ]
    }
    
  4. 删除旧索引。

您将在导入过程中将磁盘空间加倍,但除此之外这应该可以正常工作,并且您只有在数据有适当的替换后才删除数据。

关于amazon-web-services - 如何使用此架构在 Elastic Search 中复制索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57372340/

相关文章:

amazon-web-services - 从 (python) lambda 在 EC2 上运行批处理文件

mysql - 使用 AWS tomcat 和 RDS 进行 session 复制

mongodb - 如何正确断开 MongoDB 客户端

json - 将 neo4j 结果解码为 Golang 中的嵌套结构

elasticsearch - 如何通过Kibana在Elasticsearch中更新文档中的值

docker - 无法连接到 docker 中端口9300上的Elasticsearch

java - 如何增加 Spark Amazon EC2 集群上的 Java 堆空间?

java - AWS - 使用 @connections websocket 回调 url 从后端发送响应(单向) - API Gateway websocket 协议(protocol)

go - 从 FileInfo 打开文件

docker - 将 Docker 容器连接到本地 Elasticsearch 服务