由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 请教一个系统设计的问题
相关主题
傻逼太监懂个屁C*Redis和Memcached有什么区别?
有专门讲 message server performance 的资料吗node现在还行么?用的地放多不多?
redis, kafka用 vertx做学习project
Celery in Golang and Scala?有没有像ZeroMQ一样
Pinterest陶涛:三个教训和三个发展选择Node做大系统better than Java, .NET
弱问下,UBER后台用的是啥?顺便和nod101说说做产品
祝贺peking2升级成Staff & Tech Lead (转载)看到这么一段
Is Redis scalable?发现很多startup scale起来都往node scala nosql上转
相关话题的讨论汇总
话题: 匹配话题: 用户话题: ui话题: 志愿者话题: 修改
进入Programming版参与讨论
1 (共1页)
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
没人知道怎么运作的。
1 (共1页)
进入Programming版参与讨论
相关主题
T倒了以后就靠D来撑Scala了?Pinterest陶涛:三个教训和三个发展选择
C#说实际上更多是java拷贝C#概念。弱问下,UBER后台用的是啥?
redis是否支持python复合数据结构?祝贺peking2升级成Staff & Tech Lead (转载)
给大家拜个年Is Redis scalable?
傻逼太监懂个屁C*Redis和Memcached有什么区别?
有专门讲 message server performance 的资料吗node现在还行么?用的地放多不多?
redis, kafka用 vertx做学习project
Celery in Golang and Scala?有没有像ZeroMQ一样
相关话题的讨论汇总
话题: 匹配话题: 用户话题: ui话题: 志愿者话题: 修改