更新来自工人的百万文档字段
Updating field of million of document from a worker
目前,我必须更新在 elasticsearch 中索引的超过 100 万个文档中的一个字段。这是一项复杂的任务,因为该字段包含从 XML 文件生成的元数据,评估 xpath 表达式。我们必须遍历索引中的所有文档并更新该字段。所以,为了避免系统过大,我们决定使用ironworker平台。
我已经阅读了一些关于如何在 elasticsearch 中更新数百万文档的 post,比如 this one,但是考虑到我们要使用 ironworkers 有一些限制,比如一个任务只能 运行 60 分钟。
问题:
考虑到 60 分钟的限制,我如何遍历所有文档并更新其字段。
我想打开并滚动并将 scroll_id 传递给下一个工作人员,但我不知道执行下一个任务需要多长时间,所以滚动可能会过期,我将不得不重新开始.
从您的描述来看,您可以将 IronWorker 任务链接在一起,这实际上非常容易。如果您知道更新单个项目需要多长时间,那么您可以推断出您需要多长时间。假设更新一项需要 100 毫秒,那么您可以每秒执行 10 次,或者每分钟 600 次,所以可能执行 6000 次(这应该需要大约 10 分钟),然后从您的代码中排队下一个。排队下一个任务与排队第一个任务一样简单:http://dev.iron.io/worker/reference/api/#queue_a_task(也可以使用您的语言的客户端库)。
或者只是在 X 分钟后停止并排队等待下一个工人。
或者如果你想让事情变得更快,同时排队 26 个,每个字母对应一个怎么样?每个人都可以查询以分配给 (Prefix Query ) 的字母开头的所有项目。
有很多方法可以解决这个问题。
目前,我必须更新在 elasticsearch 中索引的超过 100 万个文档中的一个字段。这是一项复杂的任务,因为该字段包含从 XML 文件生成的元数据,评估 xpath 表达式。我们必须遍历索引中的所有文档并更新该字段。所以,为了避免系统过大,我们决定使用ironworker平台。
我已经阅读了一些关于如何在 elasticsearch 中更新数百万文档的 post,比如 this one,但是考虑到我们要使用 ironworkers 有一些限制,比如一个任务只能 运行 60 分钟。
问题:
考虑到 60 分钟的限制,我如何遍历所有文档并更新其字段。
我想打开并滚动并将 scroll_id 传递给下一个工作人员,但我不知道执行下一个任务需要多长时间,所以滚动可能会过期,我将不得不重新开始.
从您的描述来看,您可以将 IronWorker 任务链接在一起,这实际上非常容易。如果您知道更新单个项目需要多长时间,那么您可以推断出您需要多长时间。假设更新一项需要 100 毫秒,那么您可以每秒执行 10 次,或者每分钟 600 次,所以可能执行 6000 次(这应该需要大约 10 分钟),然后从您的代码中排队下一个。排队下一个任务与排队第一个任务一样简单:http://dev.iron.io/worker/reference/api/#queue_a_task(也可以使用您的语言的客户端库)。
或者只是在 X 分钟后停止并排队等待下一个工人。
或者如果你想让事情变得更快,同时排队 26 个,每个字母对应一个怎么样?每个人都可以查询以分配给 (Prefix Query ) 的字母开头的所有项目。
有很多方法可以解决这个问题。