Foxtable(狐表)用户栏目专家坐堂 → [求助]多线程的问题


  共有5563人关注过本帖树形打印复制链接

主题:[求助]多线程的问题

帅哥哟,离线,有人找我吗?
有点蓝
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106680 积分:542589 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/2/21 20:49:00 [显示全部帖子]

我感觉这不是单纯的线程不线程的问题,而是一种业务模式的优化。不过可能帮不了您,需要非常熟悉表结构,以及整个流程和业务逻辑才行。

提几个建议:
1、表结构和数据录入还有没有可以优化余地?或者能不能添加一些辅助表,保存一些不需要重复计算的统计结果,然后每天把这些结果计算并保存起来
2、使用线程的目的无非就是把数据进行分批计算,属于怎么分
    横向可以按商品条数进行分,比如一个线程计算1000个商品的数据
    纵向可以按属性进行分,也就是上面说的按列,因为每列的数据来自一个表,那么可以5列开5个线程,可以先把这些表指定时间段内的所有商品的数据都汇总出来保存到临时表中,最后像21楼那样,一条SQL关联把这些数据都提取出来即可

3、有时候,一个计算不一定单纯在前端使用代码处理,或者单纯在数据库使用sql处理。可以结合起来,多种方式结合,取最优的组合。

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  12楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106680 积分:542589 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/2/21 22:39:00 [显示全部帖子]

我说的临时表是指数据库的表,不是Foxtable的表,在数据库中预先建立好存储这些计算结果的表,在线程中计算后把数据存储到数据库的临时表中。

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  13楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106680 积分:542589 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/2/21 22:51:00 [显示全部帖子]

临时表加上一列【店名】区分自己的数据不就行了。

或者每个店都建立自己的临时表咯。大型项目为了方便计算,建立几百个临时表是家常便饭
[此贴子已经被作者于2019/2/21 22:52:50编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  14楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106680 积分:542589 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/2/21 23:23:00 [显示全部帖子]

既然是临时表,数据当然是需要的时候才生成。生成之前可以把旧数据删除掉咯。至于临时表有什么列,根据自己的需要设计。

就算是10W个商品,这个月都有调整,全部都要计算,也就存储10W条记录而已,100家店也就1000W条记录,如果索引建立合理,从几个1000W条记录的表里进行关联查询获取每个表10W条记录,也就1秒的事。主要的瓶颈在于生成统计结果的这个过程,就是上面所说的树形结构、还有递归计算等等,至于结果的存储和查询基本不是问题。

上面说的,全部使用sql计算,需要10秒,那么如果把这些sql,分成几部分,比如每个表的计算的sql单独出来,由线程来调用,这样就可以同时计算,会不会快呢

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  15楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106680 积分:542589 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/2/22 8:37:00 [显示全部帖子]

如果历史月份的数据是不变的,为什么不计算后直接保存下来呢。以后直接查询就行了,不需要再去计算。如果以后发现这个月数据有问题,需要修复,修复后再重新计算一次就行了

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  16楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106680 积分:542589 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/2/23 16:54:00 [显示全部帖子]

如果要使用线程的返回结果,只能是把结果放到全局变量中,无法直接使用函数的返回指的。把dt赋值给全局变量

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  17楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106680 积分:542589 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/3/16 11:50:00 [显示全部帖子]

不知道您的业务逻辑和表结构到底怎么设计的。越看越不知道您到底要做什么?只是要看看历史的入库数据而已,为什么要修改入库表的数据?

不过这条思路不通,是否应该换个思路呢。

撇开业务不管,就说一个存储流程数据的表,正常来说,1年、2年....越久的历史数据就越是静止的,也就是说这些数据基本不会被改动,那么我们就可以建立一些统计表,把这部分历史数据根据需要每年/季/月..做一次统计,然后保存下来。以后需要的时候直接调用就可以了。如果要合并最新的数据,把历史的统计数据和最新的数据的统计结果合并到一起就可以了。也就是说只需要计算最新的那部分数据即可,不需要重新计算所有的数据。

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  18楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106680 积分:542589 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/3/16 14:05:00 [显示全部帖子]

试试给界面表对应的后台表赋值呀,处理完毕,界面再重新加载数据

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  19楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106680 积分:542589 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/3/16 14:45:00 [显示全部帖子]

为什么一定要在现有的表里做文章呢。需要的只是一些查询结果,用作参考的,另外建一个查询表不行么。

1、类似帮助的模拟关联用法一样,点击入库表后,查询表显示对应的计算结果。这样只需要即时计算入库表这一行对应的统计结果即可

2、如果需要同时看所有行的记录,可以类似帮助的“在单元格绘制甘特图”一样,把入库表和查询表放到一起,同步滚动呗

 回到顶部
总数 20 上一页 1 2