• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程问答 > 手机app,根据算法算出某个权重值进行排序,如何提高排序性能?

手机app,根据算法算出某个权重值进行排序,如何提高排序性能?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-07

佚名通过本文主要向大家介绍了手机app,手机app制作,手机app开发,手机app是什么,手机app是什么意思等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:手机app,根据算法算出某个权重值进行排序,如何提高排序性能?
描述:

如绝大多数的新闻客户端和某些社区(比较著名的如reddit),都是根据某个算法算出一个权重值,再根据这个权重值进行排序(参考:http://www.ruanyifeng.com/blog/2012/03/ranking_algorithm_reddit.html)

手机app的场景下,应该怎么样去综合提高这个排序性能呢?

  • 假如单纯在数据库里面进行排序,由于order by的字段是通过算法生成,数据量一大必然低效。现在产品用的mysql还不支持函数索引
  • 假如在先抽出数据,再在程序里进行排序,数据量一大,也会占用服务器不少的内存吧?好像也不是很好的办法

请有经验人士提供一些思路。


解决方案1:

楼上总结很到位。

解决方案2:

提升一个高度来回答这个问题,或许对你的思路会有帮助。
提升性能的方式无非就几种常见的思路,顺着想一下一般都会有自己的结论。

  1. 提升算法的效率:权重的计算公式尽量不要有太高的复杂度可以提升运算速度。
  2. 用空间换时间:权重的计算结果放到一个临时字段去记录,这样排序的时候就不用重复计算权重。
  3. 避免不必要的运算:去除对结果影响不大的运算,比如一个月之前的数据不纳入排序,减少运算的数据规模。
  4. 用近似值代表准确值:不要实时的去计算权重,定时去刷新权重可以有效减少运算次数。

解决方案3:

可以单独放一个表出来, 当文章可能影响权重的内容改变时, 直接更新表里的值, 应该可以承受相当大的数量了. 即便以后再增长, 可以只对一段时间内的文章进行排序, 应该不会有问题.

解决方案4:

我以前做过类似的事是这样处理的,将耗时的计算放在每天凌晨用定时任务去做,然后结果存在order字段或者一个排序表里,读数据的时候order by或者关联下表查询就可以了。

解决方案5:

对于社区和新闻客户端来说,你不可能排序的时候带上上个月的数据,这样来讲,也没有多少。

解决方案6:

这问题放在 Android 的节点下,你是要在 Android 下实现权重计算?

要是在服务器的话,赞同 @zys 的方案,另外,要降低计算数量,私有以下愚见:

  1. 给要计算的数据加上一个 updated_at 和 calculated_at 字段,分别表示数据最新的更新时间和最后一次用排序算法计算权重值的时间。当有新的用户投票,更新数据的 updated_at 字段。定时任务计算权重后,更新数据的 calculated_at 字段。

  2. 权重计算算法里对 updated_at 和 calculated_at 作比较,当 calculated_at > updated_at 的时候,没必要重复重新计算权重值。

用这种简单的算法,可以有效的去掉很大部分已经没更新的数据,另外,假如老的数据有更新,也能列入权重的计算范围。


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 手机APP后台使用golang,java还是nodejs?
  • 抓一抓app抓包遇到反抓包
  • python可以做手机app?
  • 如何限制不同App给不同的人访问
  • APP显示不同规格的图片
  • 如何实现手机端登录?
  • 手机app,根据算法算出某个权重值进行排序,如何提高排序性能?

相关文章

  • 2017-06-07 七牛有没有这样的服务:输入一个(多个)mp4文件的url,其自动获取并生成mp3文件?
  • 2017-06-07 Laravel5x如何让404返回一个json?
  • 2017-06-07 Golang向客户端发送jsonEncoder类型数据的方法
  • 2017-06-07 我的服务器只能用localhost或127001能访问,这是怎么回事?
  • 2017-06-07 go语言中如何在xml文件指定的某处添加内容
  • 2017-06-07 (python)for循环中缩进错误时,代码依然可以执行的问题
  • 2017-06-07 代码中把object对象转换为array对象的两种方式的不同?
  • 2017-06-07 hibernate有一级和二级缓存为什么还要使用ehcache缓存?
  • 2017-06-07 Yourdependecyisn'tinthedeployedapplicationYoumayhavetochange
  • 2017-06-07 VC++中让程序子窗口先打开

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • githubcom自己的仓库如何将我的修改反馈到原作者仓库?
    • 上传返回200,error也是空,但是拼接地址后,不好用,说没有此文件。
    • 上传重名但不同内容的图片,无法覆盖最早的一张
    • 使用python中的pandas求每个值占该列的比例
    • python3X二进制字符串的问题
    • 安卓手机微信上传图片总是不成功,急,急,急,有没有人遇到过?
    • pythonjsondumps包含签名的dict出错怎么办?
    • 奇怪,win32下高级语法while对于大于0的条件判断编译成了无符号的jae跳转造成了死循环。
    • phpoop编程求教
    • python是什么这几个python版本有什么区别?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有