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

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

这是我的用例:

我使用 MySQL 作为我的主要数据存储,使用 CloudSearch 进行搜索。该数据库包含表:线程、评论、赞成票、用户。

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

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

现在,当用户对话题或评论点赞时,它会存储在 MySQL 数据库中。我的问题我应该如何使点赞与 CloudSearch 保持同步?

我看到的两个选项:

  1. 立即在 MySQL 中插入(替换)赞成票,然后在 CloudSearch 上更新分数。这涉及在每次投票时发送单个文档上传,但要确保实时准确性。
  2. 立即在 MySQL 中插入(替换)赞成票,然后将赞成票保存在某个地方的缓存中(Redis?)。每小时一次,将所有赞成票上传到 CloudSearch。

处理这种情况的最佳方法是什么?

最佳答案

这真的取决于很多事情

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

  2. 您预计会有多少“估计”赞成票?如果你选择 1,如果你能估计这个会更容易决定 数。

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

如果你知道赞成票的数量(更新到 solr)并且你有足够好的服务器,我会选择选项 1,因为它会减少维护另一个数据库的开销,以及每小时将赞成票更新到 solr 的逻辑.

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

我知道这可能不会给您确切的是或否,但正如我所说,这实际上取决于您的特定用例。

关于mysql - 我应该多久将文档上传到 CloudSearch (Solr)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31232450/

相关文章:

mysql - 无法在mysql中显示波兰语字符

php - 如何在php和mysql中使用表二的形式为表一中的每个线程数据行插入注释数据

sql - 如何在当前基于关系数据库构建的应用程序中实际集成 NoSQL 数据库

amazon-web-services - Appsync 响应映射模板 json 键名称更改

ssh - Amazon EC2 ssh 登录失败

ruby-on-rails - ActiveRecord::QueryCache#call 占用了超过 70% 的执行时间

php - 查询在 phpmyadmin 中有效,但在 PHP 脚本中无效

mysql - MySQL DB 的设计以避免具有互斥字段的表

mongodb - 什么时候需要 map reduce 进行数据库查询?

mysql - 加入表中两个不同字段的选择数据