MySQL COUNT性能vs javascript对象/数组

时间:2011-10-11 12:39:15

标签: javascript mysql performance

我有一个十分钟长的视频,人们可以停止视频并发表评论。时间(以秒为单位)和注释都保存在数据库中。可以在同一秒内留下多个评论。

当有可供查看的评论时,会显示一个图标。我正在使用10秒钟的窗口,因此在8秒内留下的评论将在3到13秒内完成。

我目前使用

每2秒轮询一次数据库

SELECT COUNT(*) AS count FROM comments WHERE time BETWEEN $time-5 AND $time+5

当有人点击图标查看评论时,我会从数据库中检索相关评论。

在开始时获取所有注释,构建某种javascript对象或数组,并使用方法之间的自定义迭代对象会不会更好 - 性能明智?

我知道这取决于我正在处理的评论数量,但是如果MySQL COUNT查询无关紧要,我不想经历构建javascript解决方案和运行性能测试的麻烦。

3 个答案:

答案 0 :(得分:3)

MySql查询会非常快,但请记住,通常服务器请求比在客户端执行任何操作要慢得多。我会首先将所有注释存储在JavaScript数组中(如您所建议的),然后轮询该数组。这将保留客户端上的所有处理。如果您的服务器因任何原因在当天变慢,它将特别有用。

编辑:为了回应尼克的有效评论,我想答案取决于有多少评论。如果有负载(数千?)并且您希望每隔几分钟发布一条新评论,那么最好继续轮询服务器。

答案 1 :(得分:1)

我原本以为这会更多地基于网站获得的点击次数 - 页面点击次数越多,这些计数就越多。

当然,如果它们被正确索引,你只会命中索引,但是构建一些东西来查询db一次并准备一个javascript数组,包含(例如)视频中每一秒的一个数组元素,然后填充如果您在网站上获得大量点击,那么每个数组的数组值和相关注释的数量会更有效...

只是我值得我吝啬...

答案 2 :(得分:1)

我只从评论中选择id +时间戳,然后在用户操作(点击,悬停)上加载评论,或者只是在电影进展时加载评论。它比每秒/两秒查询数据库更好,因为与内存计算相比,HTTP请求通常相当慢。我认为这也比一次加载评论更好,因为加载评论数据可能会减慢初始请求,并且大多数情况下你甚至不需要那些评论。缺点是用户永远不会看到初始加载后添加的注释,但我认为这是一个相当小的问题。