【问题标题】:Throttling database requests限制数据库请求
【发布时间】:2011-07-09 06:11:59
【问题描述】:

网站上的用户可以点击一个按钮来为一张又一张的图片投票。这会通过 jQuery 向 MySQL 数据库发送一些请求。我不确定,但该网站帐户可能最多允许 10 个连接。

在这种情况下,单个用户的重复点击会导致多次请求,进而导致性能问题吗?如果是这样,有哪些简单的方法可以限制请求?

编辑:问题重新表述为标记为不清楚。

【问题讨论】:

  • “我注意到单击按钮时结果显示有点滞后”——也许需要更快的服务器?你有覆盖索引吗?
  • @Mitch Wheat:我重新提出了我的问题。问题是单个用户(站点用户而不是 SQL 用户)是否可以通过重复单击触发 SQL 请求的按钮来导致一些实际的性能问题。

标签: php javascript jquery mysql


【解决方案1】:

如果没有理由让任何人每隔几秒点击一次按钮,只需为该按钮设置一个禁用功能。因此,当它被点击时,它会被禁用 5 秒,然后再次重新启用。

您可能想查找更好的计时器方法,这是我立即知道的一种方法。

你可以使用 按钮 onclick-

document.getElementById("button").disabled = true;
var enableButton = setInterval( "enableButton()", 5000 );

function enableButton()
{
document.getElementById("button").disabled = false;
clearInterval(enableButton)
}

祝你好运

【讨论】:

  • 但是如果你怀疑犯规,请求本身不会受到限制,这很容易被所说的“攻击者”规避。
【解决方案2】:

首先确保您的问题出在数据库上,也许您的网络服务器上有一些逻辑处理时间过长。

但是,要“限制”您的请求,您应该必须优化查询、使用索引、在服务器上缓存,或者重新设计您的数据库结构。

希望这会有所帮助。干杯

【讨论】:

    【解决方案3】:

    MySQL Setting Account Resource Limits

    从 MySQL 4.0.2 开始,您可以限制单个帐户对以下服务器资源的访问:

    一个帐户每小时可以发出的查询数

    一个帐户每小时可以发布的更新数量

    账户每小时可以连接服务器的次数

    附加信息 -

    MySQL 没有查询超时值,也没有任何其他内置方式来限制单个查询。但是,编写一个会杀死长时间运行的查询的脚本是非常简单的。您甚至可以捕获用户并进行查询,以便稍后击败违规的用户/程序员。

    Here 是使用 PERL 的示例。

    编辑以解决其他信息

    根据您的应用发出的查询,即使是单击一次也可以关闭整个网站。虽然,投票可以以一种非常轻量级的方式实现,所以即使您有 1000 个用户重复点击以使网站响应。

    您还可以在应用程序级别限制数据库点击 - 例如,通过在会话变量中保存用户已经投票的照片的 ID - 在点击数据库之前检查该变量,您应该没问题

    【讨论】:

    • MySQL 用户查询限制是相当粗粒度的,当你遇到它们时,最终只会禁用一切——将一个缓慢的网站变成一个根本无法工作的网站。
    • @duskwuff 你是对的,但问题是如何限制它们,而不是如何改进它们
    • 我重新提出了这个问题。我正在寻找的那种节流可能最好在 PHP 端完成,尽管我对任何可能有助于数据库的想法持开放态度。
    猜你喜欢
    • 2020-10-25
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    • 2014-05-29
    • 2017-08-12
    相关资源
    最近更新 更多