mysql - 如何在 Rails 3 应用程序中实现更快的 Search As You Type (SAYT) api

标签 mysql ruby-on-rails-3 api thinking-sphinx sunspot-rails

我的 mysql 数据库中有数百万条记录。我在 Rails 3 中为 iPhone 应用程序实现了一个普通的 REST api,但是 SAYT 功能响应真的很慢。搜索数据库并返回结果需要花费大量时间。我怎样才能提高性能?

我已经为我的表格编制了索引。 我应该更多地关注哪些方面,比如 MySQL 调优,或者我应该使用 rails sphinx 还是 sunspot?这有帮助请帮助我提供所有专家建议。

最佳答案

我同意一般的回答:使用像 Sphinx 这样的搜索引擎(并限制返回结果的数量);它们旨在完全满足您的需求。

但是,虽然数百万条记录听起来很多,但您应该首先确定什么花费了很长时间。我非常喜欢 Sphinx 和 ThinkingSphinx——他们把一个相当复杂的过程变得非常简单和容易。但是,归根结底,搜索引擎是另一个需要管理、配置、学习和了解的系统。如果您不必去那里,不去会更容易,对吧?

可能是查询,也可能是返回数据所花费的时间(limit 是你的 friend !)。或者可能是您每秒收到数百个请求,这可能是因为自动完成的延迟太——如果查找每个字符,快速打字员或多个用户可以轻松使用不为用户提供任何实用程序的查询使服务器溢出。

查看 Rails 日志,看看到底发生了什么。如果这是一个简单的查询性能问题,进行复杂的全文搜索,那么,是的,这会很慢,而 Sphinx 将值得付出努力。您的数据库有一个explain 工具,通过一些工作,它可以帮助您了解数据库为获得结果所做的工作。不使用索引的情况并不少见。

缓存呢? Memcached 是一个很棒的工具。或者甚至可能只是您的数据库缓冲区大小设置可以允许它使用更多内存进行缓存。

关于mysql - 如何在 Rails 3 应用程序中实现更快的 Search As You Type (SAYT) api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9426254/

相关文章:

php - 使用 SQL 转储将 500MB .db 文件导入 phpmyadmin

php - 用户 'root' @localhost mysql 错误 1045 的访问被拒绝

php - htmlspecialchars() 和 mysql_query() 的问题

mysql - 在 vb.net 中将括号或引号保存到 sql 中

ruby-on-rails - 在 Ruby on Rails 上 curl

mysql - 如何通过关系使用 has_many 缩短三重连接 ActiveRecord 查询?

python - 如何在Python中处理API响应

ios - 有没有简单的 API 创建方法?

javascript - 如何访问每个 JSON 对象的属性?

ruby-on-rails - 事件管理字段上的 bool 值返回空而不是 true 或 false (Rails 3.2/Active Admin)