【问题标题】:Efficient way to implement Likes features in a video application在视频应用程序中实现喜欢功能的有效方法
【发布时间】:2014-08-13 20:51:52
【问题描述】:

我有一个基于视频的项目。在这个项目中,我想实现点赞功能。也就是说,每个视频上都有一个带有总点赞数的超链接,当用户点击该超链接后,超链接将被隐藏,仅显示带有该视频总数的点赞文本。

我已经用 Ajax 用 Ja​​vaScript 编写了这段代码,但主要问题是在一个会话中,如果用户喜欢 5 个视频,那么 5 次 db 将被命中。有什么有效的方法来实现吗?

<div id="status${video.id}"><a href="javascript:callLike('${video.id}');"> Like-        </a> </div><a id="like1${video.id}" style="color:#ffffff;">${video.likesCount}</a>

function callLike(id)
{

    document.getElementById("like"+id).innerHTML='300';
    var postData = '?Id='+id; 
    var url =protocol+'//'+host+'/xxx/getLike'+postData;     
    // alert("url:"+url);
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
    }        
    req.onreadystatechange = likesres;
    req.open("POST", url, true);
    req.send(null); 

}

function likesres()
{
    if (req.readyState == 4) {
        if (req.status == 200) { 
            response = req.responseText;

            document.getElementById("like1"+id).innerHTML=response;
            document.getElementById("status"+id).innerHTML='Liked--';
       }
    }
}

【问题讨论】:

  • 您确定每个会话 5 次插入有问题吗? :)
  • 如果这是您的主要问题,您需要停止担心,或者获得更快的数据库...
  • @dandavis thnks 回复,我认为我正在使用更快的 Db(MongoDb),但我想知道是否有任何比这个更好的有效方式,因为这个项目有很多用户,如果他们都是用户单独点击5 次这样 db 将被多次击中
  • @YuryTarabanko 谢谢,是的,如果有很多用户,我认为在linkedin或facebook中他们没有使用这种方式,这就是问题。

标签: javascript java ajax social-media-like


【解决方案1】:

如果您想让这个项目具有可扩展性,您需要一个更好的项目架构。
您应该做的一个起点是在您的服务器端代码上实现一个内存队列及其处理机制。每次用户喜欢视频时,此信息都会添加到队列中,每 2 分钟处理一次队列并将其所有内容写入数据库。

这样,您可以控制 DB 被击中的次数。
但是,如果您将处理时间设置得太少,可能会给用户带来一些延迟。

希望这对您有所帮助,并让您了解需要做什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-26
    • 2016-07-10
    相关资源
    最近更新 更多