k***e 发帖数: 210 | 1 我们有一个web application是帮助志愿者和医学研究人员互相匹配的,根据志愿者的
profile会自动提供合适的医学研究,根据医学研究的eligibility criteria会自动推
荐志愿者
每次志愿者修改profile或者研究修改eligibility criteria都会触发匹配,UI会block
直到匹配结束,这个过程通常要很久,所以用户体验不是很好
现在希望可以每次修改后就自动返回页面,然后让匹配在后台自己执行,执行完以后给
用户一个提示,但是有这样一些问题
1. 用户返回以后,当匹配还在执行的时候,是否给用户提供最新的推荐,还是等匹配
完成后再给推荐?如何实现这两种情况呢?
2. 用户可以多次提交修改,但是只想匹配一次,因为匹配会读取最新修改的数据进行
匹配
我们现在是一个monolithic的app,apache+tomcat,用的是spring+hibernate+redis+
oracle,没有用任何reactive的功能,是否应该考虑用spring webflux呢或者kafka?
谢谢了 |
m******r 发帖数: 1033 | 2 我不懂啊, 为啥做个匹配会这么难 ? 临床方面的数据量按说应该很小啊,几千人了
不得了。怎么听起来这么难,那交友网站,婚介网站岂不是难上天了。 |
k***e 发帖数: 210 | 3 不是几千人,目前我们的系统有3万人,2000个研究
有一个大城市的机构要adopt,他们的目标是100万人和1万的研究
目前我们的匹配是用的fork join pool
【在 m******r 的大作中提到】 : 我不懂啊, 为啥做个匹配会这么难 ? 临床方面的数据量按说应该很小啊,几千人了 : 不得了。怎么听起来这么难,那交友网站,婚介网站岂不是难上天了。
|
h*********4 发帖数: 1 | 4 spring @async controller?
block
【在 k***e 的大作中提到】 : 我们有一个web application是帮助志愿者和医学研究人员互相匹配的,根据志愿者的 : profile会自动提供合适的医学研究,根据医学研究的eligibility criteria会自动推 : 荐志愿者 : 每次志愿者修改profile或者研究修改eligibility criteria都会触发匹配,UI会block : 直到匹配结束,这个过程通常要很久,所以用户体验不是很好 : 现在希望可以每次修改后就自动返回页面,然后让匹配在后台自己执行,执行完以后给 : 用户一个提示,但是有这样一些问题 : 1. 用户返回以后,当匹配还在执行的时候,是否给用户提供最新的推荐,还是等匹配 : 完成后再给推荐?如何实现这两种情况呢? : 2. 用户可以多次提交修改,但是只想匹配一次,因为匹配会读取最新修改的数据进行
|
k***e 发帖数: 210 | 5 谢谢,但是如何不重复提交匹配请求呢?并且在匹配还在执行的时候或者等待执行的时
候,在ui上提示用户匹配在执行,所以应该需要查询匹配对某一个用户是否在执行?
【在 h*********4 的大作中提到】 : spring @async controller? : : block
|
R**k 发帖数: 2075 | 6
不重复提交请求在前端控制一下就行了,比如5分钟之内不能重复提交.
【在 k***e 的大作中提到】 : 谢谢,但是如何不重复提交匹配请求呢?并且在匹配还在执行的时候或者等待执行的时 : 候,在ui上提示用户匹配在执行,所以应该需要查询匹配对某一个用户是否在执行?
|
w***o 发帖数: 143 | 7 可以试试这样设计:
1)UI发送的请求服务器立马返回,但是不返回查询结果,这样UI不会卡;
2)服务器跟UI之间维持一个socket连接,方便推送新的结果;
3)服务器为每个用户存储一个上次更新时间,以及上次查询状态位;
4)当收到志愿者请求,首先查询上次更新时间,如果小于设定时间间隔,则返回错误
,UI可以立马得知错误消息;如果大于设定时间间隔,但是上次查询尚未结束,返回错
误,UI可以得知错误消息;如果大于设定时间间隔,并且上次查询已经结束,则启动新
的查询;
5)研究院更新方法可以跟志愿者更新方法类似处理;
6)当服务器收到合理的请求时,启动新的匹配过程;当得到新的匹配结果,写入数据
库,并使用socket往用户界面推送结果,这样用户可以在更新数据之后逐渐收到匹配结
果;
7)匹配结束时通知用户,如果匹配结果为空也通知用户;如果需要跟细节的进度,可
以实时更新用户查询进度条,当前查询了多少家研究院。
希望对你有帮助。
block
【在 k***e 的大作中提到】 : 我们有一个web application是帮助志愿者和医学研究人员互相匹配的,根据志愿者的 : profile会自动提供合适的医学研究,根据医学研究的eligibility criteria会自动推 : 荐志愿者 : 每次志愿者修改profile或者研究修改eligibility criteria都会触发匹配,UI会block : 直到匹配结束,这个过程通常要很久,所以用户体验不是很好 : 现在希望可以每次修改后就自动返回页面,然后让匹配在后台自己执行,执行完以后给 : 用户一个提示,但是有这样一些问题 : 1. 用户返回以后,当匹配还在执行的时候,是否给用户提供最新的推荐,还是等匹配 : 完成后再给推荐?如何实现这两种情况呢? : 2. 用户可以多次提交修改,但是只想匹配一次,因为匹配会读取最新修改的数据进行
|
a****g 发帖数: 480 | 8 不使用队列(如celery,rabbitmq)的话,把匹配的活放到数据库里,单独做个
service或应用,定时检查数据库求并按照顺序运行匹配任务 |
w********m 发帖数: 1137 | 9 spring这一套都是黑箱。
sometimes works, sometime not
没人知道怎么运作的。 |