javascript - 'heavy' 是如何在服务器上每隔几秒运行一次mysql命令

标签 javascript php jquery mysql server

我有一组由 GUI 用于位置和内容的数据,并且该位置也存储在 MySQL 中。每次数据发生变化,也会反射(reflect)在服务器上。

然后,如果我想像jquery(或javascript,我不知道)一样频繁地更新MySQL,跟踪“mousemove” Action ,也就是说,向服务器发送请求,每次“mousemove”都会更改MySQL中的值,它有多“重”,特别是当多个用户使用同一服务器时?

什么是更好的解决方案?我正在考虑等待 3 秒直到 Action 完成,然后如果没有更多 Action ,则向服务器发送请求。

虽然很多人不使用我的服务器,但这总是让我担心并阻碍我的进步。请帮忙。

最佳答案

最好有一个中间内存解决方案来减少数据库调用的数量。例如。 Memcached。但!但!在我们开始之前,让我们先了解一些数字。

那么我们来算一下,好吗?

您想要跟踪事件的详细信息。

| Action to be recorded       | Frequency of Occurrence  | Per user/minute avg. |
|:---------------------------:|:------------------------:|:--------------------:|
| 1. MouseMove!!! (Seriously?)|             Very Heavy!!!|                   200|
| 2. Clicks (MouseDown)       |            Medium to High|                    10|
| 3. Hover (MouseOver)        |                      High|                    50|

因此,对一个活跃用户进行非常粗略的估计,特定 session 触发的总事件将为260/每分钟

因此,假设 10 个并发用户,您的每分钟事件数变为 2600

这将成为对您自己的服务器进行 DDoS 攻击的可靠方式。

一些有用的提示。

  1. 尝试批量记录事件,即。记录客户端发生的事件,一旦超过阈值,就向服务器发送请求以记录该批处理。

  2. 不要使用主应用程序服务器进行此类日志记录,因为这就是——等等——日志记录,并且您应该使用单独的服务器来维护日志。

  3. 如前所述,在服务器上也应先在内存中存储日志,然后再将日志推送到数据库。
  4. 这些数据不需要甚至需要存储在关系数据库中。几乎所有大公司都使用扁平数据库(NoSQL)来存储此类信息。
  5. 如果您仍然决定继续使用关系数据库,则在执行INSERT时使用事务
  6. 如果仅对登录用户进行跟踪,并且专用内存缓存对您来说不可行,您可以将跟踪数据存储在用户 session 中,并在达到阈值后再次将记录移至数据库.

关于javascript - 'heavy' 是如何在服务器上每隔几秒运行一次mysql命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37976315/

相关文章:

javascript - 是否有提供类似 "Wall"功能的 Web 框架或项目

PHP 只从数据库返回一个值

用于填充数组的 javascript/jQuery 匿名函数

javascript - Anyway 在 Ext js 中实现 tagcloud 吗?

javascript - 如何从 JSON 数据获取要填充的表行?

php - 我可以在 PHP 中使用多个类来扩展一个类吗?

javascript - Bootstrap 模式中的动态内容和 Ajax [Laravel] 中的动态数据

jquery - jQuery 中 hasClass 时如何添加 css 类

php - 如何使用 jQuery/Javascript 将变量发布到另一个页面?

php - 注册后 Facebook 重定向