sqlserver2012 有一张表【文献表】【ID,摘要,标题,关键字】,两千五百万数据,现在需要把每条数据取出来,然后
1、根据合适的规则判断下,判断后给文献添加上【一级类别,二级类别】,一条文献可以归属到多个类别。
2、根据其他规则判断,文献数据是否是某些疾病的指导文献,若是给文献【添加疾病ID】【疾病名称】,一条文献可以是很多疾病的指导文献
3、现在单条文献的判断大约是100毫秒【Dll封装好的】,只要该文献含有类别,或含有疾病,就把该文献插入到新新建的Paper数据表中
想用多线程做这个功能,求大神指导
你这里用多线程做读写应该也不会有太多性能提升,建议一个服务单独做读取,读取了后直接写入队列,另一服务(可部署多个实例)从队列中抽数据分析后进入另一队列,然后由单独的服务入库。
这样既保证读写性能(读写速度远大于你分析速度),同时又能最小化分析这个过程的的开销(如果具体分析的过程还是访问数据,建议对这块单独做优化)。而且横向扩展能力好。
windows服务?
@青龙入海: 服务拿什么做宿主随便,不过windows服务维护起来比较方便。
看这意思,大多是写操作啊?所以再多线程,查询数据库的瓶颈也在那呢。。。
那怎么办呢?
一次性操作的,没必要用多线程吧。每次取个10000条,用不了几次就搞定了~
这样就是要分页了,但是表数据没有添加索引,我只能读取,所以我觉得你说的不靠谱
@青龙入海: 没索引,不知道加么?觉得影响写入,跑完job再干掉就是了。。。
你用得好,就靠谱;用不好,那就换其他办法吧。
你这个的瓶颈在于数据库,又不在内存和CPU,多线程意义不大的。
应该怎么办呢?
@青龙入海: 这个就是一次性的工作,难道你还天天nong这事不成?
一次性工作你优化个半死也没用。
有钱就买好的CPU,好的内存,好的硬盘,速度自然就快了。
@爱编程的大叔: 不是一次性的 三个月要重新跑一次,文献数据、疾病数据、文献类别数据都是不断增加
@青龙入海:
1、设计上是否可以避免这事,也就是说从源头修改。
2、三个月就是一次性的,我说的频繁是指一天几百万次的,这才叫多次。
不然最起码一天得有几万次,要不然就没有意义了。
3、没有不需要成本的解决方案,
要么请好的程序员,要么多花时间写软件,要么多花钱买硬件。
自己看着办吧。
如果一定要遍历 不会有什么好的提高性能的办法 怎么地 所有的数据都要执行一遍
这个还要问吗?兄弟。
你写成过程程序,用shell启动加入参数不就OK了;
或者你写一个处理文件逻辑的程序A。
另外写个程序B,在B中使用Process启动A的线程,加入参数就OK。