我有一个REST,它由不同的资源组成。其中一些资源也被编入索引并在ES中保持同步,我正在实现一个队列系统,以异步方式管理这些操作。我决定选择Beanstalkd作为排队系统。
我的托特
对于每个资源,我将有一个不同的管,我将分裂索引工作的资源。例如,我将有像"index_users“、"index_posts”这样的管道,它们将接收带有资源in的作业,以便在ES中进行索引:
->useTube('index_users')->put( json_encode( [ 'ids' => [ 33, 35, 66 ] ] ) );对于不同的资源,有不同的管道可以帮助我保持事物的分离(例如,我可以决定停止索引用户只需删除管道index_users ),作业将被更快地分析,因为每个队列中的作业数量会减少,而且对一个资源的大量索引操作不会影响对其他资源的索引。
我的问题
发布于 2014-11-29 17:35:54
这是个很好的方法。我只会在每条消息中放置一个id,而不是几个id。如果作业失败了,那么您只能重试这一项。当每条消息只有一个id时,您可以进行更好的控制。
Beanstalkd是快速的,它会很好地处理您的数字。你可以很容易地使用多根管子。更好的是,您可以根据消息的数量和从一个消息到另一个消息的速率来设置员工的数量。
如果您需要一个良好的Beanstalkd管理界面,可以试用console。
另一方面,查看ElasticSearch中的大容量操作,如果这是您需要了解的内容,那么您需要在管道上放置多个it才能对其进行大容量索引。
https://stackoverflow.com/questions/27161619
复制相似问题