我应该多久将文档上传到CloudSearch(Solr)?

时间:2015-07-05 16:22:37

标签: mysql database amazon-web-services solr amazon-cloudsearch

这是我的用例:

我使用MySQL作为主要数据存储,使用CloudSearch进行搜索。该数据库包含表:线程,注释,upvotes,用户。

我创建了一个表达式,用于根据"趋势"对搜索结果进行排序。使用upvotes和created_at日期(Hacker News Hot算法)。此表达式称为"趋势",并在CloudSearch查询中使用,如下所示:/search?q=Superman&sort=trend+desc

(upotes-1)/pow(floor((_time-created_at)/3600000)+2, 1.8)

现在,当用户赞成线程或评论时,它存储在MySQL数据库中。我的问题如何让upvotes与CloudSearch保持同步?

我看到两个选项:

  1. 立即在MySQL中插入(替换)一个upvote,然后在CloudSearch上更新分数。这涉及在每个upvote上发送单个文档上传,但确保实时准确性。
  2. 立即在MySQL中插入(替换)一个upvote,然后将upvote保存在某个地方的缓存中(Redis?)。每小时一次,将所有upvotes上传到CloudSearch。
  3. 处理这种情况的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

这真的取决于很多事情

  1. 您的solr设置,服务器数量,内存,CPU,存储空间,文档数量,每个分片/服务器的索引大小等。

  2. 有多少"估计"你期待的是什么?如果你选择 1,将更容易决定你是否可以估计这一点 号。

    由于您使用的是SolrCloud,因此它具有NRT功能,可确保使用 这些文件几乎可以立即用于搜索。但 再次,这取决于您当前的文档语料库,以及多少 每秒或每分钟更新一次。

  3. 如果你知道upvotes的数量(对solr的更新)以及你是否有足够好的服务器,我会选择1,因为它将减少管理另一个数据库的开销,以及每小时更新upvotes的逻辑到solr 。

    您可以随时设置几个测试服务器,并进行一些压力测试,以找出Solr性能降低的确切更新次数。

    我知道这可能不会给你一个确切的是或否,但就像我说的,这实际上取决于你的特定用例。