Beanstalkd队列用于索引Elasticsearch中的文档

时间:2014-11-27 01:19:11

标签: queue beanstalkd

我有一个由不同资源组成的REST API。其中一些资源也被索引并在ES中保持同步,我正在实现一个队列系统,以异步方式管理这些操作。我决定将Beanstalkd作为队列系统。

我的想法

对于每个资源,我将有一个不同的管,我将拆分     按资源索引工作。例如,我会有管     “index_users”,“index_posts”将接收作业     ES中索引的资源ID:

->useTube('index_users')->put( json_encode( [ 'ids' => [ 33, 35, 66 ] ] ) );

对于不同的资源有不同的管可以帮助我保持分离(例如我可以决定停止索引用户只是删除管index_users),工作将被更快地分析,因为每个队列的工作量将会减少并且数量巨大对一个资源的索引操作不会影响索引其他资源

我的问题

  • 这可能是一个很好的方法吗?
  • 这个解决方案可以有什么样的缺点?
  • 有人告诉我,在豆茎中最好有1个管道,有1000000个工作岗位(与2个资源相关),而不是2个管道(每个资源1个),每个管道有5000个工作岗位。他们建议我只用一根管子来消耗内存。这是真的吗?

1 个答案:

答案 0 :(得分:0)

这是一个很好的方法。我会为每条消息只放置一个id,而不是几个id。好像作业失败了,那么你只能重试那个。如果每封邮件只有一个ID,则可以更好地控制。

Beanstalkd很快,它可以很好地处理你的数字。您可以轻松使用多个管。它甚至更好,因为你可以根据消息的数量设置工人的数量,并从一个到另一个的速率。

如果您需要一个良好的Beanstalkd管理界面,您可以试用https://github.com/ptrofimov/beanstalk_console

另一方面,在ElasticSearch中查看批量操作,如果这是你需要的东西,那么你需要在管上放置多个ID才能对其进行批量索引。

相关问题