如果您暂时忘了需要将初始数据导入到Elasticsearch中,那么我将使用事件系统 将 数据 推 送到Elasticsearch。从长远来看,这会更有效率。
你的应用程序知道 正是 当事情需要由Elasticsearch索引。以您的tweet为例,有时某个新的tweet将进入您的应用程序(例如,用户编写了一个)。这将触发一个newTweet
事件。您已经有了一个侦听器,该侦听器将侦听该事件,并在分派此类事件时将其存储在Elasticsearch中。
如果你不希望使用资源/时间在Web请求要做到这一点(和你肯定 不 希望这样做),听众可以一个作业添加到队列(Gearman的或Beanstalkd为例)。然后,您将需要一个工作人员来接替该工作并将推文存储在Elasticsearch中。
主要优势是使Elasticsearch保持最新的实时性。您不需要会造成延迟的cronjob。您(通常)一次将处理一个文档。您无需费心sql数据库来找出需要(重新)索引的内容。
另一个优点是,当事件/数据量失控时,您可以轻松扩展。当Elasticsearch本身需要更多功能时,请将服务器添加到集群中。当工作人员无法处理负载时,只需添加更多负载(并将它们放置在专用机器上)。再加上您的Web服务器和sql数据库不会有任何影响。