【问题标题】:What db to chose, using rails. Large db使用 rails 选择什么数据库。大数据库
【发布时间】:2012-06-13 08:55:22
【问题描述】:

我正在使用非常大的数据库,有些表有超过 30.000.000 个条目,现在我使用的是 mysql,但是对于某些搜索查询,我必须等待超过 1-2 分钟。有什么提高速度的方法吗?另外,没有其他数据库会更快吗?另外,在rails中使用什么?现在我使用简单的%like%,还有其他方法可以通过某个字段进行搜索吗?

【问题讨论】:

  • 对于任何数据库,您应该首先考虑提高性能的地方之一是基于您的查询类型的索引。您正在查询哪些列以及表上有哪些索引?您是否正在执行并发查询?如果是这样,您可以尝试使用 InnoDB 而不是 MyISAM 表。一般来说,如果配置得当,MySQL 可以处理数十亿行。
  • %like% 在大多数(全部?)数据库中导致顺序表扫描,但有些可以使用like% 的索引。如果您需要进行大量这样的搜索,那么使用 FTS 可能会更好。

标签: mysql ruby-on-rails database optimization


【解决方案1】:

使用%LIKE% 进行具有这么多行的全文搜索不会产生性能。我强烈推荐使用Sphinx 和优秀的ThinkingSphinx gem 之类的东西。它与 MySQL 和 Rails/ActiveRecord 开箱即用,配置简单。

This 指南介绍了如何将 Sphinx 搜索守护程序安装到特定平台上。

This 指南描述了如何安装和使用thinking-sphinx gem。 (请注意,Rails 2 和 3 有不同的安装指南,因此请确保您遵循正确的安装指南)。

安装后,您可以在您有兴趣搜索的模型的列上定义索引。

Ryan Bates 在使用 ThinkingSphinx 进行全文搜索时进行了 Railscasts episode,这是一个很好的开始方式。

编码愉快!

【讨论】:

    【解决方案2】:

    根据 %like%

    我遇到了类似的情况,我使用 LIKE 通配符搜索一张大桌子,时间为 3、4 分钟。我能够通过索引列并使用 MATCH() 来解决一些问题,如果您需要准确性,这可能不适用于您的情况。

    参考http://dev.mysql.com/doc/refman//5.5/en/fulltext-search.html

    注意:我使用了搜索和匹配的组合,你可以看到 这里http://anotherfeed.com/feedmap.php?search=facebook前50 结果返回 LIKE,最后 50 个返回 MATCH 并显示 php mysql 的索引分数。前 50 个总是更准确,因为我只是索引标题而不是完整描述。

    $query2="SELECT *, MATCH(pagename) AGAINST('".urldecode($_REQUEST['search'])."') AS score FROM anotherfeedv3.af_freefeed WHERE MATCH(pagename) AGAINST('".urldecode($_REQUEST['search'])."') LIMIT $start, $limit";
    

    【讨论】:

      【解决方案3】:

      如果你想坚持使用 mysql,那就选择 myisam。

      想出一个智能创建索引的策略。

      有策略地预先计算复杂的结果。

      只返回你需要的数据。

      将部分 db 非规范化以提高性能。

      使用多个从站读取

      将数据库拆分为多个数据库

      你需要做很多测试。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-12
        • 1970-01-01
        • 2012-11-30
        • 2012-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多