【问题标题】:Dealing with millions of data records in MySQL and PHP/Laravel在 MySQL 和 PHP/Laravel 中处理数百万条数据记录
【发布时间】:2016-01-29 03:29:40
【问题描述】:

我有一个名为 revisions 的活动记录表(如下图所示)是为一个大型学习管理系统构建的,它主要记录表上的 CRUD 操作(例如,谁对哪个对象做了什么在什么时间)。

此表最多可包含 3M 条数据记录。我想用 PHP/Laravel 在前端为此构建一个搜索功能。

现在我的问题是为具有数百万条数据记录的表构建具有高性能的搜索功能,我应该考虑哪些事项,代码级别、数据库级别的内容是什么,或者是否存在支持此类问题的 3rd 方的东西?

我在使用 PHP/Laravel、Python/Django、Ruby 等构建系统方面经验丰富。但我从未遇到过这样的案例,需要处理数百万条数据记录。所以请记住我的知识/经验水平。我没有这方面的经验。

注意:搜索将是一种高级搜索,让用户可以使用不同的条件和参数进行搜索,更改的对象、更改的对象、更改的时间等。

如果我的问题仍然不清楚,请告诉我。

【问题讨论】:

  • 虽然您的问题很清楚,但它既非常宽泛,又会吸引基于意见的答案,使其脱离本网站的主题。我投票关闭它。
  • 嗯,这是一个必须广泛的问题。你能解释一下我在哪里可以问吗?

标签: php mysql performance laravel search


【解决方案1】:

我建议您查看https://www.elastic.co/products/elasticsearch,并在您保存到主数据库时将您的活动记录保存到其存储中。然后您可以轻松搜索任何字段。 Elasticsearch 可以存储无模式的 JSON 文档,如果您更喜欢 SQL 方式,还有另一个搜索引擎 - http://sphinxsearch.com/

【讨论】:

  • 所以如果我使用elasticsearch,CRUD操作需要在两者上进行吗?我的 MySQL 数据库和 Elasticsearch 实例?
  • 是的。 Laravel 有特殊的模型侦听器laravel.com/docs/5.1/eloquent#events,因此当您更改基本模型对象时,您可以轻松地对其他存储中的数据进行 CRUD
【解决方案2】:

将无数行插入表中没有问题。当您尝试在表上执行重要的 SELECT 时,就会出现性能问题。你提到了“搜索”;您将不得不限制“用户”可以搜索的内容。但至少尝试一下他们可能想要搜索的内容。

您提到了“搜索对象”,但我没有看到名为对象的列。给定对象可能有多少行?你需要所有的行吗?还是选定的? (无论表大小如何,对象上的 INDEX 都可能提高查询效率。)

第三方软件有时会妨碍处理非常大的表。小心。

【讨论】:

    猜你喜欢
    • 2019-03-31
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 2020-08-28
    • 2012-10-21
    • 1970-01-01
    • 2012-10-12
    • 2017-12-01
    相关资源
    最近更新 更多